komutunu çalıştırmasını sağlayarak zsh'yi çağırın ve sonra çıkmak yerine etkileşimli moda girin


27

zsh ile benzer şekilde başlamak istiyorum

zsh -c 'my_prog option1 option2'

ama bu komutu çalıştırdıktan sonra çıkmak yerine, beni çağrılan zsh'nin alayında bırakarak (nereden çağırıldığı değil). Bunun için belirli bir kullanım durumu, screenrc dosyalarındadır, şöyle bir şey yapabilirsiniz:

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

ve bu komutu çalıştırdıktan sonra kapanmak yerine orada bir kabuk kalır.

Yanıtlar:


23

Bunu yapmayı tavsiye edebileceğimden değil.

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

Ekranda oynayabileceğiniz ve kullanabileceğiniz diğer püf noktaları vardır. $STY değişken.

Tek tek ekranlarla zsh'den bir şey çalıştırmak istiyorsanız, .zshrc veya .zlogin içindeki $ STY değişkenini kontrol edebilirsiniz. Biçiminde <PID>.<TTY>.<HOSTNAME>.

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

Ekrandaysa ve ~/.zsh-<TTY> ($ STY değişkeninden) var, kaynak, sonra neşeli yoluna devam et. İnteraktif kabuğu çağırmadan önce bir ortam değişkenini de ayarlayabilirsiniz.

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

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

Bu çekleri .zshrc / .zlogin içine ekleyin.


Bana SHLVL'yi öğrettiğin için
Nicolas Dumazet

iç içe kabuğu önlemek için umuyordum, ama ah iyi.
Autoplectic

9

Fazladan bir kabuk olmadan çalışan bir çözüm buldum İşte . Eklemek:

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

ile .zshrc, sonra zsh ile

zsh -is eval 'your shell command here'

Aynı anda birçok mermi başlatmak için gerçekten harika.


5

Eklemeye ne dersiniz? ; exec zsh Komuta mı? Bu şekilde sonunda tek bir kabuk kaldı.


3
Eğer gerçekten eğer yürütme ihtiyacınız yok ; zsh -i, bunu zaten sizin için yapar.
Darren Hall

4

Sahibim eval "$RUN" sonunda .zshrc. Artık ekstra kabuk olmadan komutları çalıştırabilirim:

RUN='my_prog opt1 opt2' zsh

Bu garip bir çamur gibi görünüyor - ama çok iyi çalışıyor!
zaTricky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.