Görevi askıya alma ve ardından Ctrl-Z bgdiziye çok sık devam etmesine izin verme şeklini takip ediyorum .
Merak ediyordum, bunu tek bir tuşa basmanın herhangi bir yolu var mı?
Benim kabuğum zsh
Görevi askıya alma ve ardından Ctrl-Z bgdiziye çok sık devam etmesine izin verme şeklini takip ediyorum .
Merak ediyordum, bunu tek bir tuşa basmanın herhangi bir yolu var mı?
Benim kabuğum zsh
Yanıtlar:
Ctrl+ ZSekansı olmayan bir kabukla, terminal tarafından ele alınır. (Yararlı arkaplan: 'terminal', 'kabuk', 'tty' ve 'konsol' arasındaki tam fark nedir? )
Sadece küçük bir olmayan uzayabilir grubu fonksiyonları olabilir bir terminalde bir anahtara bağlı olan . Sen edebilirsiniz tuşları özelleştirmek bu fonksiyonların bağlı ancak başka işlevi ekleyin değil. Bu işlevler üç kategoriye ayrılır:
eof
, Ctrl+ D), satır sonu ( eol
, Ctrl+ M), silme karakteri (sol erase
, Ctrl+ H), silme kelime (sol werase
, Ctrl+ W), silme hattı ( kill
, Ctrl+ U).stop
( Ctrl+ S), start
( Ctrl+ Q). Yalnızca terminal bilgisayarla yetişemediğinde veya tersi durumda olduğunda karakterleri düşüren eski seri terminallerde kullanışlıdır.intr
, Ctrl+ C), zorla bırakma ( quit
, Ctrl+ \), askıya alma ( Ctrl+ Z).Linux da dahil olmak üzere bazı sistemler bu listeyi genişletiyor, ama ben arka plan içeren bir tane görmedim. Hem çekirdekteki terminal sürücüsünde hem de terminal emülatöründe destek alacağını unutmayın. Bu nedenle, ön plan işine bir SIGTSTP sinyali gönderen askıya alma işlemini yapmanız gerekir . Bu , genellikle kabuk olan ön plan işinin liderinin ana sürecinde bir SIGCHLD'i tetikler . Kabuk SIGCHLD'i aldığında, waitpid
neden bildirildiğini anlamaya çağırır ve bir arka plan işinin askıya alındığını tespit etmesi üzerine bir bildirim (örn. [1] + 12345 suspended mycommand
) Ve yeni bir bilgi istemi görüntüler.
Kabuğu SIGCONT
, ön plandaki işe bir sinyal göndermesi için programlayabilirsiniz . Zsh'nin bunun için bir kancası olduğunu sanmıyorum, kaynak kodunu eklemelisin. Ve zsh'ın gerçekten programı kesmek isteyip istemediğinizi bilmemesi mümkün değildir (hata, bu program yanlış bir şey yapıyor olabilir, ben hallederken askıya almama izin verin) ya da arka plana ayırmak.
Yapmam gereken, Ctrl+ Zsh sırasını geçerli işi arka planlamak için zsh olarak ayarlamaktır ( %%
). Bu şekilde, Ctrl+ Z Ctrl+ tuşlarına basarak ön plan işini arka plana gönderebilirim Z. Bunda olduğum sürece, ben yapmak Ctrl+ Zakım giriş hattı boş değilken (Ben sadece bir alt işlemi geri dönmediler böylece) başka yararlı bir şeyler yapmak: bana başka komutu yazın sağlayan mevcut giriş hattını “askıya” Bundan sonra kesilen çizgi tekrar giriş arabelleğine itilir.
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
^ z ^ z yukarıdaki zsh gibi bash'ta mümkündür, yine de biraz garip ve bunu uzun süredir çalıştırmadım:
"\C-z": "bg\n"
yani bir komut çalıştırıldığında askıya alma için ^ z açılır, ardından bash istemi için kapatılır.
Yani çözümü buldum, tam olarak istediğimi değil ama buradan lanet olası /superuser//a/161922/35223
Boş bir komut satırında bg komutunu çalıştırır (böylece Ctrl + Z Ctrl + Z bir programı askıya alır ve hemen arka planda devam eder).
Ctrl+Z
arama çağrısı bg
, boş olmayan bir giriş hattının tespit edildiğinden emin değilim).
Başlangıçta ön planda çalıştırmak ve sonra arkaplana geçmek istediğiniz komutlar mı? Bunu yapmanın daha basit bir yolu olup olmadığını bilmiyorum. Ancak, başlangıçta arka planda olacak komutları çalıştırmak isterseniz, satırın sonuna sadece bir işaret ve işareti ekleyebilirsiniz. örneğin, ping google.com &
arka planda pinglemeye başlayacaktır; sen yazmazsan, onunla etkileşime giremezsin fg
.