O problema é que você está tentando executar um alias em um shell não interativo. Quando você executa ssh user@computer command
, command
é executado de forma não interativa.
Shells não interativos não lêem aliases (do man bash):
Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).
Funciona se você executá-lo novamente manualmente porque o comando final bash
inicia um shell interativo para que seus aliases estejam disponíveis agora.
Como alternativa, você poderia lançar um shell interativo ( bash -i
) em vez de um simples shell de login ( bash -l
) na máquina remota para executar seu alias:
ssh user@remote_computer -t 'bash -ic "my_alias;bash"'
Esta parece ser uma abordagem muito complicada. Você não explicou por que exatamente precisa fazer isso, mas considere estas alternativas:
-
Basta iniciar um shell interativo de login normal na máquina remota e executar o comando manualmente:
user@local $ ssh user@remote user@remote $ my_alias
-
Se você quiser sempre que o alias seja executado quando se conectar a este computador, edite o
~/.profile
(ou~/.bash_profile
, se presente) do computador remoto e adicione essa linha no final:my_alias
Porque
~/.profile
é lido toda vez que um shell de login é iniciado (assim, sempre que você se conecta viassh
, por exemplo), isso fará com quemy_alias
seja executado toda vez que você se conectar.Observe que, por padrão, os shells de login leem
~/.profile
ou~/.bash_profile
e ignoram~/.bashrc
. Algumas distribuições (Debian e seus derivados e Arch, por exemplo) distribuições como o Ubuntu têm seus~/.profile
ou~/.bash_profile
arquivos% source~/.bashrc
padrão, o que significa que seus aliases definidos em~/.bashrc
também estarão disponíveis em um shell de login. Isso não é verdadeiro para todas as distribuições, portanto, talvez seja necessário editar manualmente o~/.profile
para que ele tenha a origem~/.bashrc
. Observe também que, se existir~/.bash_profile
,~/.profile
será ignorado pelo bash.