Aliases de Bash não estão funcionando sobre o ssh

2

Meus aliases de Bash não estão trabalhando em ssh, por exemplo:

$ ssh remote_name ll dir_name
bash: ll: command not found

A página man do Bash diz:

Aliases are not expanded when the shell is not interactive,
unless the expand_aliases shell option is set using shopt...

Então eu adicionei shopt -s expand_aliases no topo do meu arquivo ~/.bashrc nos arquivos .bashrc locais e remotos (já que eu não tinha certeza do que era necessário - remote right ??).

Eu reiniciei o Bash local e tentei ssh remote_name ll dir_name novamente, mas infelizmente ainda recebi o mesmo erro bash: ll: command not found .

Alguém pode explicar o que devo fazer para que isso funcione, por favor?

Apenas no caso de minhas versões do Bash:

Local Bash:
$ bash --version 
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

Remote Bash:
$ bash --version 
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
    
por mattst 14.08.2016 / 12:57

2 respostas

3

~/.bashrc é lido por uma sessão interativa sem logon de bash , não por sessões não interativas.

ssh remote some_command está executando some_command em uma sessão não interativa de bash , portanto, o controle remoto ~/.bashrc não está sendo lido (e, claro, a leitura do local está fora de questão).

A sessão não-interativa de bash pode ler o arquivo definido pela variável de ambiente BASH_ENV ou ENV (se definido).

Se você quiser ficar com os aliases, abra o shell no modo interativo também:

ssh remote bash -ic 'll'

Observe também que, os aliases são independentes, eles não aceitam nenhum argumento como se você estivesse fornecendo um nome de diretório. Você precisa usar funções para ter argumentos como entradas. Uma definição de função semelhante seria:

ll_f () { ls -al --color=auto "$@" ;}

Agora você pode fazer:

ll_f /dir_name
    
por 14.08.2016 / 13:16
-2

use

 #!/bin/bash -l

resolveu o problema

    
por 05.10.2018 / 12:32

Tags