Estou tendo problemas para obter aliases para expandir minha conta de hospedagem quando executo um comando como:
ssh user@server "bash -c \"alias\""
Meu arquivo .bashrc é:
echo .bashrc
# .bashrc
shopt -s expand_aliases
# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"
Quando executo o comando ssh acima, vejo ".bashrc" ecoado. Mas se eu tentar executar aliases, não recebo nada.
Eu poderia tentar "bash -ic", mas na verdade isso está em um script que não posso mudar facilmente e quero saber por que isso não está funcionando.
Saída de ssh user@server "bash -c \"shopt\""
.bashrc
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases off
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
Saída de ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
pois~/bin:$PATH
ele funciona bem.~/.local/bin
quando o/etc/profile
processo for processado, ele será adicionado automaticamente ao seu PATH. Você também pode logo. /etc/profile
após criar a pasta para adicioná-la ao seu PATH sem precisar reinicializar ou fazer logout / login.Respostas:
Na
bash(1)
página do manual:fonte
shopt -s expand_aliases
no meu .bashrc, mas isso não parece funcionar. Eu não sei por que não, mas eu acho que essa seria a resposta normalmenteshopt -s expand_aliases
está no seu.bashrc
antes dos pseudônimos? Certamente, sua saída na pergunta mostra queexpand_aliases
éoff
.shopt
mostra como desativada. Talvez exista alguma configuração estranha de servidor que impeça isso, eu não sei. Eu tenho uma solução alternativa.bashrc
arquivo não estava sendo originado por padrão.O shell que você obtém ao executar um comando remotamente com SSH não é um shell interativo nem um shell de logon:
(não há
i
nem nãol
na resposta)No caso de Bash, isso significa que nenhum dos arquivos de inicialização usuais é lido.
Você pode forçar o shell remoto para ser um shell de login, adicionando
-l
à sua invocação Bash, o que significa que iria analisar o primeiro um dos~/.bash_profile
,~/.bash_login
e~/.profile
que ele pode encontrar, em busca nessa ordem, mas não~/.bashrc
. Isso significa que você precisará colocar seus aliases em um desses arquivos.fonte
Eu tive o mesmo problema e, a princípio
shopt -s expand_aliases
, não pareceu ajudar. O que descobri é que essas opções devem ser definidas antes de adicionar os aliases reais. Portanto, se os aliases forem criados antes de você.bashrc
definir asexpand_aliases
opções, eles não estarão disponíveis. Portanto, você deve carregar (ou recarregar) aliases depois de definir a opção.fonte
bash (1) diz
então, obviamente, você fornece o .bashrc manualmente ou o executa com -i
se tudo o que você precisa é de aliases, eu recomendaria dividi-los em, por exemplo, aliases e, em seguida, obtê-los do .bashrc e do seu script, apenas no caso de surgir algo no .bashrc que possa interromper o script, como geralmente acontece
fonte
Você pode resolver qualquer problema digitando:
na primeira linha.
fonte