Inspirado por esta pergunta, intitulado: Quando os comandos internos são carregados na memória , ao tentar responder a isso, tentei o seguinte comando e fiquei um pouco surpreso por não conseguir executá-lo:
$ strace cd $HOME
Existe um método que eu possa usar para executar strace para os comandos internos do Bash?
strace
não execução de um programa não resulte em rastreamento?Respostas:
Se você pensar em como
strace
funciona, faz todo o sentido que nenhum dos componentes internos do Bash sejam rastreáveis.strace
só pode rastrear executáveis reais, enquanto os embutidos não são.Por exemplo, meu
cd
comando:Truque para strace'ing cd?
Me deparei com essa técnica em que você poderia invocar
strace
obash
processo real e, assim, indiretamente traçarcd
esse caminho.Exemplo
O que resulta em eu poder rastrear o
bash
processo da seguinte maneira:Este é o prompt do Bash, onde está sentado, esperando por alguma entrada. Então, vamos dar o comando
cd ..
:A partir da saída acima, você pode ver onde eu digitei o comando
cd ..
e pressione enter (\n
). A partir daí, você pode ver que astat()
função foi chamada e, posteriormente, o Bash está sentado em outroread(0..
prompt, aguardando outro comando.fonte
Para
strace
o shell fazendocd /some/dir
:fonte
$1
aqui, poisbash
, não deveria ser%
ou%1
?Você pode tentar o seguinte:
Por exemplo:
fonte