invocare zsh, eseguendo un comando, quindi accedere alla modalità interattiva invece di uscire


32

vorrei iniziare zsh simile a

zsh -c 'my_prog option1 option2'

ma invece di uscire dopo aver eseguito quel comando, lasciandomi al propt dello zsh invocato (non da dove viene chiamato). un caso particolare per questo è nei file screenrc, potresti fare qualcosa del tipo:

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

e dopo aver eseguito quel comando ti rimane una shell invece di chiuderla.

Risposte:


25

Non che consiglierei 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 usando la $STYvariabile.

Se vuoi che qualcosa venga eseguito da zsh con schermate individuali, puoi controllare la variabile $ STY nel tuo .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, procuratelo, quindi continua per la tua strada. È inoltre possibile impostare una variabile di ambiente prima di chiamare la shell interattiva.

> FOO=bar zsh -i
> env | grep FOO
FOO=bar

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

Aggiungi quei controlli nel tuo .zshrc / .zlogin.


complimenti per avermi insegnato su SHLVL
Nicolas Dumazet il

speravo di evitare il guscio nidificato, ma vabbè.
Autoplectic

14

Ho trovato una soluzione che funziona senza una shell extra qui . Inserisci:

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

a .zshrc, quindi chiama zsh con

zsh -is eval 'your shell command here'

Davvero ottimo per avviare molte shell contemporaneamente.


6

Che dire di aggiungere ; exec zshil comando? In questo modo alla fine rimane solo un guscio.


5
In realtà non hai bisogno del dirigente se lo fai ; zsh -i, lo fa già per te.
Darren Hall,

4

Ho eval "$RUN"alla fine del mio .zshrc. Ora posso eseguire comandi senza la shell aggiuntiva, con:

RUN='my_prog opt1 opt2' zsh

Sembra un kludge strano - ma funziona così bene!
zaTricky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.