¿Cómo detectaría un shell que no es de inicio de session? (En Zsh)

Quiero crear un script que se ejecute cuando se inicie una instancia de Zsh, pero solo si la instancia es:

  • No iniciar session
  • Interactivo

Creo que tengo razón al decir que .zshrc ejecuta para todas las instancias de shell interactivas, .zprofile y .zlogin ejecutan para todos los shells de inicio de session, y .zshenv ejecuta en todos los casos.

La razón por la que quiero hacer esto es verificar si hay un agente ssh-agent en ejecución, y usarlo en el shell recién abierto, si es que existe.

Imagino que cualquier testing llevada a cabo sería mejor colocarla en .zshrc (ya que esto garantiza un shell interactivo) y el script designado de "evento no de inicio de session" llamado desde allí.

Probablemente, primero quiero comprobar si el nuevo shell ya se está ejecutando como parte de una session SSH remota existente antes de probar el ssh-agent, pero he encontrado esta receta SE para este propósito.

Escojo Zsh ya que es el caparazón que prefiero, pero imagino que cualquier técnica correcta para hacer esto se aplicaría de manera similar a otras conchas.

 if [[ -o login ]]; then echo "I'm a login shell" fi if [[ -o interactive ]]; then echo "I'm interactive" fi 

[[ -o the-option ]] devuelve verdadero si se establece-la opción.

También puede get los valores de las opciones con la matriz asociativa especial $options o ejecutando el set -o .

Para verificar si hay un agente ssh:

 if [[ -w $SSH_AUTH_SOCK ]]; then echo "there's one" fi 

En ksh (y zsh ):

 case $- in (*i*) echo interactive; esac case $- in (*l*) echo login; esac 

En bash , es un desastre, necesitas:

 case $- in *i*) echo interactive; esac # that should work in any Bourne/POSIX shell case :$BASHOPTS: in (*:login_shell:*) echo login; esac 

Y $SHELLOPTS contiene algunas opciones más. Algunas opciones se pueden establecer con set -<x> , algunas con la set -o option , algunas con la shopt -s option .