Por aliases em um Bash shell não interativo não trabalho
-
06-07-2019 - |
Pergunta
Eu estou tentando usar aliases em um shell bash não-interativo. Defini minhas aliases em ~/.bashrc
e eu definir o BASH_ENV=~/startUpFile
variável. O conteúdo do startUpFile são source ~/.bashrc
.
Eu posso ver que meus aliases são reconhecidos, quando eu executar o comando alias
. No entanto, se eu tentar usar um alias definido no ~/.bashrc
, Bash podem não reconheceu. Dá-me o erro comando desconhecido.
Com o tcsh é muito fácil de fazer isso porque o arquivo ~/.cshrc
é sempre ler.
Alguma idéia de como eu posso fazer isso com um shell bash?
Solução
O shopt -s expand_aliases
comando irá permitir a expansão alias no conchas não-interativas.
Outras dicas
.bashrc
somente é processada por conchas interativos.
Além disso, aliases não são expandidas quando o shell não é interativa, a menos que a opção shell expand_aliases
é definida usando shopt
. A menos, claro, o modo POSIX é invocado chamando o shell com o nome sh
vez de bash
.
As pessoas que usam pseudônimos muito frequentemente fonte de sua .bashrc
no final do seu perfil para que os aliases estão lá, mesmo para os reservatórios não-interativas. Isto pode não ser o melhor caminho, mas é bastante comum.
São coisas como esta que me levam a crer que no século 21 devemos abandonar shell scripts em favor de uma linguagem full-blown como Python. É muito mais previsível.
Você tem que
shopt -s expand_aliases
no arquivo apontado em sua BASH_ENV
Eu tinha problema semelhante, no final, eu descobri que ~ / .bashrc foi tudo que eu precisava.
No entanto, no Ubuntu, eu tinha que comentar a linha que pára o processamento ~ / .bashrc:
If not running interactively, don't do anything
[ -z "$PS1" ] && return