A execução de aliases por script falha enquanto a execução de alias manual é bem-sucedida sem problema [duplicado]

0

Eu executei um script Bash remoto bash <(curl -s URL/script.sh | tr -d '\r') que faz as três ações a seguir:

  1. Faz o download de outro script com uma lista de aliases ( aliases.sh ) para a pasta atual
  2. Executa um comando source ./aliases.sh .
  3. Executa um dos aliases na lista depois que o script foi gerado. Este alias é 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.

    
por pntshere 22.01.2018 / 06:13

2 respostas

1

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".

    
por stumblebee 22.01.2018 / 06:25
1

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
    
por sudodus 22.01.2018 / 08:51