Eu tenho uma função bash (ou alias), por exemplo function install() {sudo apt-get install $@}
. Ao executar o comando install dicelab
, o que eu espero que seja realmente executado é sudo apt-get install dicelab
. Onde posso ver o que realmente foi executado pelo shell? Gostaria de garantir que meus aliases mais complicados estejam funcionando conforme o esperado.
20
$@
parte do seu apelido? Lembre-se de que os aliases não suportam argumentos, que serão expandidos para os parâmetros posicionais (se houver) do contexto que chama o alias. A maneira usual de executarsomealias some args
funciona apenas expandindo o alias e deixando os argumentos para segui-lo. Se você realmente quer ser capaz de acessar os argumentos, use uma função, e citar o"$@"
"$@"
, argumentos com caracteres de espaço em branco ou glob serão queimados de outra forma.Respostas:
Use
set -x
no shell.Usando
set -x
voltas naxtrace
opção de shell (set +x
desliga) e deve funcionar em todos Bourne-como conchas, comobash
,dash
ksh93
,pdksh
ezsh
. Isso solicita que o shell exiba o comando que é executado após a execução de expansões de alias e expansões variáveis etc.A saída estará no fluxo de erros padrão do shell (assim como no prompt comum), para que não interfira nos redirecionamentos da saída padrão e será precedida por um prompt, conforme definido pela
PS4
variável do shell (+␣
por padrão).Exemplo com algumas funções:
Estou executando com
set -x
todas as minhas conchas interativas por padrão. É bom ver o que realmente foi executado ... mas notei que a conclusão de guias programáveis etc. pode causar saída de rastreamento indesejada em alguns shells.fonte
Você poderia usar
shell-expand-line
, que está vinculado a Control- Alt- epor padrão:Entre outras coisas, ele irá substituir aliases na linha atual com a sua definição para que você possa ver um comando que ainda está indo para executar. Exemplo:
fonte
shell-expand-line
?zsh
. Mas algumas pessoas vêm-se com as suas próprias ideias: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlVocê pode usar o bash built-
type
in para ver um alias ou uma definição de função que você irá executar:fonte