Posso rastrear um script de traço sem modificar seu código-fonte?

5

Gostaria de rastrear um script de shell para fins de depuração sem ter que modificar seu código-fonte (por exemplo, alterar o shebang ou inserir um set -x no início). É um script postinst do dpkg, então não é chamado sozinho no shell.

Na esperança de encontrar uma variável de ambiente para isso, procurei na página de manual por dash , mas não consegui encontrar nada.

Existe alguma maneira de fazer isso?

    
por Christoph Wurm 12.01.2012 / 10:02

2 respostas

4

Como você tem acesso de superusuário, basta alterar /bin/sh . É claro que você estará afetando qualquer coisa que queira usar o shell padrão (por exemplo, scripts cron), então tente restaurá-lo o mais rápido possível.

Primeiro, crie o wrapper. Crie em seu diretório pessoal um arquivo chamado mysh com este conteúdo:

#!/bin/dash
exec /bin/dash -x "$@"

Torne-o executável.

$ chmod +x ~/mysh

Em seguida, altere /bin/sh . Primeiro, certifique-se de anotar onde está apontando

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 Jan 12 17:42 /bin/sh -> /bin/dash

Então, imprudentemente mude-o. (Atenção: haverá uma fração de microssegundo quando o sistema não tiver /bin/sh .)

$ sudo ln -sf ~/mysh /bin/sh

Assim que terminar o seu trabalho, restaure-o.

$ sudo ln -sf /bin/dash /bin/sh

Boa sorte!

    
por 12.01.2012 / 17:51
4

Você pode usar o sinal -x no próprio comando de invocação:

sh -x ./script
    
por 12.01.2012 / 10:04