¿Por qué mi alias no funciona sobre ssh?

9

Tengo un alias definido en mi .bashrc

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

Es muy útil :) pero no funciona a través de ssh:

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

¿Porqué es eso?

Zanna
fuente
1
.bashrcsolo se lee si el shell es interactivo.
user4556274
1
Con su alias sobre ssh, probablemente no habrá color, donde si cambia su alias, alias l.='ls -d .* --color'aparecerán los colores. Solo pensé que agregaría eso. Al menos estaba experimentando eso.
Terrance
@Terrance Me preguntaba sobre eso ... Todavía no obtengo color (ni columnas) aunque obtengo color (y columnas) como antes después de cambiar el alias (y hacer source .bashrc)
Zanna
1
ah ja! Creo que lo tengo. Pruebe su alias como alias l.='ls -dC .* --color'donde se Cmuestran las columnas.
Terrance
1
Edité la respuesta para abordar el problema del color.
Matei David, el

Respuestas:

10

Tratar:

ssh localhost -t bash -ci l.

Nota:

  • El alias debe estar en ~/.bashrcel servidor remoto, no en su máquina local.

  • La -iopción le dice bashque ejecute un shell interactivo. Los alias están habilitados de forma predeterminada solo en shells interactivos.

  • Las -topciones le dicen sshque asigne un pseudo-tty. Sin esto, bashemite un mensaje de advertencia cuando se inicia en modo interactivo. Esto también permite lscolores. Sin ella, tendrías que usar --color=always, ver man ls.

  • Hay otra forma de habilitar los alias, sin establecer el indicador interactivo, a saber shopt -s expand_aliases. Entonces podrías probar:

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

    Sin embargo:

    • Es .bashrcposible que solo defina alias si la fuente de shell es interactiva. En este ejemplo, el shell no sería interactivo en ese momento.

    • Si intenta definir alias en la misma línea, vea esto .

Matei David
fuente
1
eso funciona ... a su explicación, claro, pero estoy sshpensando en mí misma :)
Zanna
1
Me refería en general al usar ssh. Sí, localhosteso no es un problema.
Matei David el
ssh ... <cmd>sale cuando <cmd>se hace. Si desea mantener el caparazón después ls, intente ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David
Ajá entiendo. Muchas gracias. Voy a eliminar mis comentarios :)
Zanna