Pourquoi mon alias ne fonctionne-t-il pas sur ssh?

9

J'ai un alias défini dans mon .bashrc

alias l.='ls -d .* --color=auto'

C'est très utile :) mais cela ne fonctionne pas via ssh:

$ ssh localhost l.
bash: l.: command not found

Pourquoi donc?

Zanna
la source
1
.bashrcn'est lu que si le shell est interactif.
user4556274
1
Avec votre alias sur ssh, il n'y aura probablement pas de couleur, où si vous changez votre alias, alias l.='ls -d .* --color'les couleurs apparaissent. Je pensais juste ajouter ça. Au moins, je vivais ça.
Terrance
@Terrance Je me posais des questions à ce sujet ... Je n'ai toujours pas de couleur (et pas de colonnes) bien que j'obtienne la couleur (et les colonnes) comme avant après avoir changé l'alias (et fait source .bashrc)
Zanna
1
ah ha! Je crois que j'ai compris. Essayez votre alias comme alias l.='ls -dC .* --color'où les Ccolonnes affiche.
Terrance
1
J'ai modifié la réponse pour résoudre le problème de couleur.
Matei David

Réponses:

10

Essayer:

ssh localhost -t bash -ci l.

Remarque:

  • L'alias doit se trouver ~/.bashrcsur le serveur distant, pas sur votre ordinateur local.

  • L' -ioption indique bashd'exécuter un shell interactif. Les alias sont activés par défaut uniquement dans les shells interactifs.

  • L' -toption indique sshd'allouer un pseudo-tty. Sans cela, bashémet un message d'avertissement lors du démarrage en mode interactif. Cela permet également des lscouleurs. Sans cela, il faudrait utiliser --color=always, voyez man ls.

  • Il existe une autre façon d'activer les alias, sans définir l'indicateur interactif, à savoir shopt -s expand_aliases. Vous pouvez donc essayer:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'

    Toutefois:

    • Vous .bashrcpouvez définir des alias uniquement si le shell qui l'approvisionne est interactif. Dans cet exemple, le shell ne serait pas interactif à ce moment.

    • Si vous essayez de définir des alias sur la même ligne, voyez ceci .

Matei David
la source
1
cela fonctionne .... à votre explication, bien sûr, mais je suis sshpour moi :)
Zanna
1
Je voulais dire en général lors de l'utilisation ssh. Oui, localhostce n'est pas un problème.
Matei David
ssh ... <cmd>sort quand <cmd>c'est fait. Si vous souhaitez conserver le shell après ls, essayez ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David
Aha je comprends. Merci beaucoup. Je vais supprimer mes commentaires :)
Zanna