Se você estiver executando o shell script "b" do shell script "a", todos os aliases e variáveis definidos no script "b" são bons apenas para o ambiente shell, eles não são passados de volta para o shell script "a".
Eu executei um script Bash remoto bash <(curl -s URL/script.sh | tr -d '\r')
que faz as três ações a seguir:
aliases.sh
) para a pasta atual source ./aliases.sh
. rss
, destinado a reiniciar o serviço do servidor da Web. Por algum motivo, a execução do alias pelo script sempre falha e, no entanto, a execução manual sempre é bem-sucedida.
O estado atual é que o rss
alias (e todos os outros aliases na lista, na verdade) seriam ignorados e considerados "inexistentes" quando executados pelo script.sh
, mesmo que o arquivo aliases.sh
seja originado e execução de rss
e todos os outros aliases serão bem-sucedidos se eu os executar manualmente (digitando rss
e pressionando Enter).
Por que essa "discriminação de execução", de modo que a execução do alias de script falha, mas a execução de alias manual é bem-sucedida?
Eu reproduzi isso em alguns ambientes diferentes do Ubuntu. Eu não posso explicar isso e apreciaria sua opinião sobre isso.
Se você estiver executando o shell script "b" do shell script "a", todos os aliases e variáveis definidos no script "b" são bons apenas para o ambiente shell, eles não são passados de volta para o shell script "a".
Os aliases são feitos para uso interativo. Em um script, você pode obter o mesmo resultado (obtido do alias) inserindo o comando correspondente no próprio script.
Se você quiser usá-lo várias vezes, crie uma função e chame-a no script.
Exemplo:
alias alidr='sudo lsblk -o model,name,size,fstype,label,mountpoint'
pode ser substituído em um script bash com
function flidr {
sudo lsblk -o model,name,size,fstype,label,mountpoint $*
}
e pode ser chamado no script com
flidr
ou para mostrar apenas unidades especificadas com parâmetros
flidr /dev/sda /dev/sdb