¿Cómo puedo determinar qué secuencia de comandos, programa o shell ejecutó mi script de Perl?¿Cómo puedo averiguar qué script, programa o shell ejecutó mi script de Perl?
Ejemplo: Me gustaría tener salida legible para humanos si se ejecuta desde shell (personalizado para cada tipo de shell), un tipo diferente de salida si se llama como script de otro script perl y un formato legible por máquina si se ejecuta desde un programa como un servidor de integración continua.
Motivación: Tengo una herramienta que cambia su salida en función de qué shell lo ejecuta. Normalmente implementaría este comportamiento como una opción para el script, pero el diseño de esta herramienta no permite las opciones. Otros shells tienen variables de entorno que indican qué shell se está ejecutando. Estoy trabajando en un parche para admitir Powershell, que no tiene esa variable especial.
Editar: Muchas de estas respuestas son específicas de Linux. Desafortunadamente, Powershell es para Windows. getppid
, la variable $ENV{SHELL}
, y desgranar a ps
no ayudará en este caso. Esta secuencia de comandos debe ejecutarse multiplataforma.
No estoy seguro de entender, ¿no debería estar mirando el proceso principal en ese caso? – x0n
Puede probar para ver si STDOUT es un terminal ('-t') y, de ser así, suponga que ha sido invocado desde un shell interactivo en lugar de, por ejemplo, un daemon de integración continua. Sin embargo, esta técnica común no se refiere a la personalización de la salida per-distinct-possible-parent (pero, de todos modos, ese es un deseo un poco fuera de lugar). – pilcrow
Se olvidó mencionar, normalmente busca una variable de entorno que el shell o el usuario establece para indicar qué shell se está ejecutando; con Powershell, no hay tal variable de entorno. –