invocare zsh, dopo aver eseguito un command e quindi entrare in modalità intertriggers invece di uscire

vorrei iniziare zsh simile a

zsh -c 'my_prog option1 option2' 

ma invece di uscire dopo aver eseguito quel command, lasciandomi al propt della zsh invocata (non dovunque sia chiamata da). un particolare caso d'uso per questo è nei file screenrc, si potrebbe fare qualcosa di simile:

 screen -t my_prog 0 zsh -c 'my_prog opt1 opt2' 

e dopo aver eseguito quel command, ti sei lasciato con una shell invece di chiudere.

Non che avrei consigliato di farlo.

 (sirius)~: zsh -c 'print hello; zsh -i' hello (sirius)~: echo $SHLVL 2 

Ci sono altri trucchi che puoi giocare con lo schermo e utilizzando la variabile $STY .

Se si desidera eseguire qualcosa da zsh con singole schermate, è ansible controllare la variabile $ STY all'interno del proprio .zshrc o .zlogin. È nel formato <PID>.<TTY>.<HOSTNAME> .

 if [[ -n $STY ]] then if [[ -f ~/.zsh-$STY[(ws:.:)2] ]] then . ~/.zsh-$STY[(ws:.:)2] fi fi 

Se nella schermata e se ~/.zsh-<TTY> (dalla variabile $ STY) esiste, fonte che, quindi proseguite in modo merry. È inoltre ansible impostare una variabile di ambiente prima di call la shell intertriggers.

 > FOO=bar zsh -i > env | grep FOO FOO=bar > RUNTHISCOMMAND=/path/to/script zsh -i .zshrc: if [[ -n $RUNTHISCOMMAND ]] then $RUNTHISCOMMAND fi 

Aggiungere questi controlli nel tuo .zshrc / .zlogin.

Ho trovato una soluzione che funziona senza un guscio aggiuntivo qui . Inserisci:

 if [[ $1 == eval ]] then "[email protected]" set -- fi 

a .zshrc, quindi call zsh con

 zsh -is eval 'your shell command here' 

Davvero ottimo per avviare un sacco di conchiglie contemporaneamente.

Cosa succede ; exec zsh ; exec zsh al command? In questo modo c'è solo una shell a sinistra.

Ho eval "$RUN" alla fine del mio .zshrc . Posso ora eseguire comandi senza il guscio extra, con:

 RUN='my_prog opt1 opt2' zsh