Por que meu alias não funciona com ssh?

9

Eu tenho um alias definido no meu .bashrc

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

É muito útil :), mas não funciona via ssh:

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

Por que é que?

Zanna
fonte
1
.bashrcé lido apenas se o shell for interativo.
user4556274
1
Com o seu alias acima de ssh, provavelmente não haverá cores, onde se você alterar o alias para alias l.='ls -d .* --color'as cores aparecerão. Apenas pensei em acrescentar isso. Pelo menos eu estava experimentando isso.
Terrance
@Terrance Eu estava pensando sobre isso ... Eu ainda obter nenhuma cor (e sem colunas) embora eu começar a cor (e colunas) como antes depois de mudar o alias (e fazendo source .bashrc)
Zanna
1
ah ha! Eu acho que entendi. Tente seu alias como alias l.='ls -dC .* --color'onde as Ccolunas mostram.
Terrance
1
Editei a resposta para resolver o problema de cores.
Matei David

Respostas:

10

Tentar:

ssh localhost -t bash -ci l.

Nota:

  • O alias deve estar no ~/.bashrcservidor remoto, não na sua máquina local.

  • A -iopção diz bashpara executar um shell interativo. Os aliases são ativados por padrão apenas em shells interativos.

  • As -topções informam sshpara alocar um pseudo-tty. Sem isso, bashemite uma mensagem de aviso quando iniciado no modo interativo. Isso também permite lscores. Sem ele, você teria que usar --color=always, veja man ls.

  • Há outra maneira de ativar aliases, sem definir o sinalizador interativo, a saber shopt -s expand_aliases. Então você pode tentar:

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

    Contudo:

    • Você .bashrcpode definir aliases apenas se a origem do shell for interativa. Neste exemplo, o shell não seria interativo naquele momento.

    • Se você tentar definir aliases na mesma linha, consulte isso .

Matei David
fonte
1
que as obras .... a sua explicação, claro, mas eu estou sshing para mim :)
Zanna
1
Eu quis dizer em geral ao usar ssh. Sim, localhostisso não é problema.
Matei David
ssh ... <cmd>sai quando <cmd>terminar. Se você quiser manter a casca por perto ls, tente ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David
Aha eu entendo. Muito obrigado. Vou eliminar os meus comentários :)
Zanna