¿Trampa en la señal DEBUG para el tablero?

¿Trampa en la señal DEBUG para el tablero?

Con el bash shell, puedes instalar una trampa en la DEBUGseñal sintética. Esto es útil y ejecutará su función o fragmento de código en cada comando de Shell. Por ejemplo:

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

La idea aquí es instalar la trampa en un archivo insertado, por ejemplo, /etc/profile.d/bash-loggery hacer que los comandos de la sesión del shell del usuario se registren automáticamente en syslog cada vez que sucedan. Esto también es útil pararastrear fácilmente comandos remotos.

Al observar el código fuente del shell del tablero, creo que entiendo que no existe tal DEBUGseñal disponible.

¿Existen soluciones o alternativas para lograr el mismo resultado con el shell del tablero?

Respuesta1

El enfoque más completo sería volver a compilar el shell con la compatibilidad con syslog habilitada. Eso también evita shells que (por cualquier motivo) no cargan ~/.lo que-perfil o ~/.lo que-rc.

Esto se incluye como una opción en la fuente estándar de Bash, pero para otros shells es posible que necesites buscar o escribir un parche.

Dudaría en recomendar leer e evalingresar línea por línea, porque los comandos pueden abarcar varias líneas y evalla mitad de un comando fallará o hará algo incorrecto. Los tipos de comandos afectados incluyen: canalizaciones y comandos condicionales (donde cada línea termina con &&o ||) |, comandos compuestos (incluidos los grupos entre corchetes), líneas continuadas con barras invertidas, cadenas entrecomilladas de varias líneas y <<documentos aquí. (Probablemente hay más de los que no he pensado).

En casos limitados, puede resultarle set -vútil set -xcombinarlo con la redirección de stderr a una tubería para registrar. Sin embargo, es imperfecto y también redirige a stderr desde los programas que ejecuta. (En Bash puedes elegir un descriptor de archivo diferente para set -xescribir, lo que resuelve ese problema).

Me gustaría señalar que si va, ssh host some_command no habrá ningún shell interactivo o de inicio de sesión involucrado, por lo que sus archivos rc no se cargarán, lo que evitaría su registro.

información relacionada