Armadilha no sinal DEBUG para o shell do painel?

Armadilha no sinal DEBUG para o shell do painel?

Com o shell bash, você pode instalar uma armadilha no DEBUGsinal sintético. Isso é útil e executará sua função ou trecho de código em cada comando do shell. Por exemplo:

$ trap 'logger -t shell "${BASH_COMMAND}"' DEBUG

A ideia aqui é instalar o trap em um arquivo inserido, por exemplo, /etc/profile.d/bash-loggere fazer com que todos os comandos de sessão do shell do usuário sejam registrados automaticamente no syslog sempre que ocorrerem. Isto também é útil pararastrear facilmente comandos remotos.

Olhando para o código-fonte do shell do painel, parece que entendo que não existe tal DEBUGsinal disponível.

Existem soluções alternativas ou alternativas para obter o mesmo resultado com o shell do painel?

Responder1

A abordagem mais completa seria recompilar o shell com suporte a syslog habilitado. Isso também contorna shells que (por qualquer motivo) não carregam ~/.qualquer que seja-perfil ou ~/.qualquer que seja-rc.

Isso está incluído como uma opção na fonte padrão do Bash, mas para outros shells você pode precisar encontrar ou escrever um patch.

Eu hesitaria em recomendar a leitura evallinha por linha, porque os comandos podem abranger várias linhas e evalmetade de um comando falhará ou fará a coisa errada. Os tipos de comandos afetados incluem: pipelines e comandos condicionais (onde cada linha termina com &&, ||ou |), comandos compostos (incluindo grupos entre colchetes), linhas continuadas com barras invertidas, strings entre aspas de várias linhas e <<documentos aqui. (Provavelmente há mais do que eu não pensei.)

Para casos limitados, você pode achar set -vútil set -x, combinado com o redirecionamento do stderr para um canal para o logger. No entanto, é imperfeito, pois também redireciona o stderr dos programas que você executa. (No Bash você pode escolher um descritor de arquivo diferente para set -xescrever, o que resolve esse problema.)

Eu gostaria de salientar que, se você for, ssh host some_command não haverá nenhum shell interativo ou de login envolvido, portanto, seus arquivos rc não serão carregados, o que ignoraria seu registro.

informação relacionada