Geçerli komutun ortasından bir alt kabuk çalıştırma


16

Bu senaryoda sık sık kendimi buluyorum. Bir komut yazmanın ortasındayım ve tamamlamadan önce başka bir şeyi kontrol etmem gerekiyor.

Şimdiye kadar hatırladığım giriş ile bir tür alt kabuk açmanın bir yolu var mı, o zaman bu alt kabuktan çıktığımda bulunduğum yere geri döndüm?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

kullanıyorum zsh


2
Neden sadece başka bir terminal penceresi açmıyorsunuz?
Barmar

@Barmar Benim için, linux sistemlerimin çoğunda GUI kullanmıyorum, bu yüzden TTY'yi değiştirmek zorunda kalıyordum. Bu da yeniden kimlik doğrulamam gerektiği anlamına geliyor. Aşağıdaki seçenekler çok daha verimlidir.
Zachary Brady

3
Konsolda birden fazla sanal terminal almak için screenveya tuşunu kullanabilirsiniz tmux.
Barmar

Yanıtlar:


16

EscQKomut arabelleğini kaydeden ve yeni bir komut girmeye izin veren tuş kombinasyonu vardır. Komutu çalıştırdıktan sonra arabellek daha önce yazdıklarınızı içerir. Bunu bitirmeden önce başka bir komut çalıştırmanız gerekiyorsa, EscQtekrar yazabilirsiniz .

( EscQHenüz bastıktan sonra alt kabuk açmaya çalışmadım .)

Bkz. Http://zsh.sourceforge.net/Intro/intro_10.html ve "esc-q" için arama yapın


Bu tam olarak istediğim şey, çok teşekkürler! Hemen geri dönmek yerine iç içe bir kabuk çalıştırabilirdim ama kullanım durumum için hemen geri dönmek mükemmel çalışıyor.
Panayiotis


7

Buna benim çözümüm kesinlikle düşük teknolojili ve hantal, ancak muhtemelen zaten aşina olduğunuz anahtar dizilere dayanıyor: Hit Ctrl+ A, sonra #, sonra ENTER.

Bu, #satırın başına a ekleme , böylece bir yorum yapma, sonra yürütme, böylece komut geçmişine itme etkisine sahiptir . Daha sonra yardımcı komutunuzu girebilir, ardından komut geçmişi boyunca yorumlanmış komuta geçebilir, komutu kaldırabilir #ve gerektiği gibi komutu tamamlayabilirsiniz.


Klavyenizdeki "ev" düğmesine basmalısınız, 1 tuşa basıldığından ve gerçekten basmak için gereken enerjiden tasarruf
etmelisiniz

@Ferrybig - evet, bu iyi, günlük klavyem için HOME anahtarı olmayan bir MacBook Pro . ANA eşdeğerdir FN + SOL OK , ancak en fazla terminalinin üzerinde bu kaydırır.
Dijital Travma

2

Ben yazarken Ctrl+ Zben yazarak olduğum komutu “askıya alma” ve başka komutu yazın. Bu komutu çalıştırdıktan sonra (veya Ctrl+ ile iptal ettikten sonra C), askıya alınan komut baskı için geri gelir (hatta imleç konumunu hatırlar). Ek bir kolaylık olarak, Ctrl+ yazdığımda komut satırı boşsa Z, anahtar bgbunun yerine yerleşik olanı çağırır (böylece bir double Ctrl+ Zdoğrudan arka plana çalışan bir komut gönderir).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(Önceden adresinde yayınlanan şeyi kontrol ederken yarım daktilo komutu hatırla esas olarak elverişli yüzden hiçbir şey yapamaz bash, çözümler vardır. Bu biraz daha meraklısı sürümüdür yerleşik bağlanmasının M-qiçinpush-line .)

Bu bir alt kabuk çalıştırmaz: öncekinin “askıya alınmasından” sonra yazdığınız komut aynı kabukta çalışır. Bu, farklı bir dizinde çalıştırmak istediğiniz bir komutu yazdıktan sonra fark ederseniz, geçerli dizini değiştirmek gibi şeyler yapmanızı sağlar. Yeni bir kabuk örneği çalıştırmak istiyorsanız, zshbir anahtar ciltlemesinden çalışabilirsiniz , ancak bunun özellikle yararlı olduğunu düşünmüyorum.

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.