Alias 'não são executáveis / executáveis a partir de um script de shell? Mac OS X Sierra 13.x

-1

Portanto, esta imagem explica basicamente

link

Eu tenho um alias 'configurado para abrir uma nova guia no terminal e fazer outras coisas, até mesmo um alias para executar o script de shell de depuração, mas o script debug.sh simplesmente usa um alias, newtab , para tentar abrir uma nova aba, que funciona apenas digitando newtab , mas não funciona, nem qualquer outro alias ', de dentro de um .sh ou qualquer outro arquivo executável, como eu corrijo isso? / p>

Uma coisa que notei é que estou colocando todos os meus export 'e alias ' em /etc/bashrc e não ~/.bash_profile ou os outros, e dificilmente vejo /etc/bashrc mencionado em qualquer lugar

estou fazendo certo?

    
por lopu 07.04.2018 / 10:18

1 resposta

1

A expansão de alias é feita somente a partir do shell interativo, mas não dentro dos scripts, portanto debug é expandido para newtab , mas newtab não é expandido, pois é chamado a partir de um script.

Se você usar funções exportadas em vez de aliases, isso funcionará: -

debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab

A exportação é necessária, porque os scripts são executados em sub-shells, embora para a instância específica citada seja apenas newtab que precisa ser uma função.

As funções podem ser usadas em vez de aliases em todos os lugares, mas podem fazer muito mais, como adicionar um parâmetro extra ao final da sequência de execução, um requisito muito simples que os aliases não podem fazer. Na verdade, eles podem fazer qualquer coisa, mas diferentemente dos scripts que executam no shell atual, podem mudar o ambiente e o diretório atual, para o qual um script precisa do comando . ou source .

    
por 07.04.2018 / 11:34