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

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

Então esta captura de tela basicamente explica isso

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

Eu tenho alguns alias configurados 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 debug.shscript simplesmente usa um alias, newtab, para tentar abrir uma nova guia, que funciona apenas digitando newtab, mas não funciona, nem qualquer outro alias, de dentro de um .sh ou de qualquer outro arquivo executável, como faço para corrigir isso?

Uma coisa que notei foi que estou colocando todos exportos meus 'e alias' em /etc/bashrce não ~/.bash_profileou nos outros, e quase não vejo /etc/bashrcmenção em nenhum lugar

eu estou fazendo a coisa certa?

Responder1

A expansão do alias é feita apenas a partir do shell interativo, mas não dentro de scripts, portanto debugé expandida para newtab, mas newtabnão é expandida, pois é chamada a partir de um script.

Se você usar funções exportadas em vez de aliases, 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 que você cita seja apenas newtabuma função.

Funções podem ser usadas em vez de aliases em qualquer lugar, mas podem fazer muito mais, como adicionar um parâmetro extra ao final da string de execução, um requisito muito simples que os aliases não podem fazer. Na verdade, eles podem fazer qualquer coisa que os scripts podem, mas, diferentemente dos scripts, eles são executados no shell atual, para que possam alterar o ambiente e o diretório atual, para os quais um script precisa .ou sourcecomando ser alcançado.

informação relacionada