Menjalankan subkulit dari tengah perintah saat ini


16

Saya sering menemukan diri saya dalam skenario ini. Saya sedang mengetik perintah dan saya perlu memeriksa sesuatu yang lain sebelum saya menyelesaikannya.

Apakah ada cara untuk membuka subkulit semacam dengan input saya saat ini yang masih diingat, maka ketika saya keluar dari subkulit ini saya kembali ke tempat saya sebelumnya?

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

saya menggunakan zsh


2
Mengapa tidak membuka jendela terminal lain saja?
Barmar

@Barmar Bagi saya, saya tidak menggunakan GUI pada sebagian besar sistem linux saya jadi saya harus mengganti TTY's. Yang berarti saya harus mengautentikasi ulang. Opsi di bawah ini jauh lebih efisien.
Zachary Brady

3
Anda dapat menggunakan screenatau tmuxuntuk mendapatkan beberapa terminal virtual di konsol.
Barmar

Jawaban:


16

Ada kombinasi tombol EscQyang menyimpan buffer perintah dan memungkinkan untuk memasukkan perintah baru. Setelah menjalankan perintah, buffer berisi apa yang Anda ketikkan sebelumnya. Jika Anda harus menjalankan perintah lain sebelum menyelesaikan ini, Anda bisa mengetik EscQlagi.

(Saya tidak mencoba membuka subkulit setelah menekan EscQ.)

Lihat http://zsh.sourceforge.net/Intro/intro_10.html dan cari "esc-q"


Ini persis apa yang saya inginkan, terima kasih banyak! Saya bisa membuatnya menjalankan cangkang bersarang alih-alih langsung kembali tetapi untuk kasus penggunaan saya kembali langsung berfungsi dengan sempurna.
Panayiotis


7

Solusi saya untuk ini jelas berteknologi rendah dan kikuk, tetapi bergantung pada urutan-kunci yang mungkin sudah Anda kenal: Hit Ctrl+ A, lalu #, lalu ENTER.

Ini memiliki efek memasukkan a #di awal baris, sehingga membuatnya menjadi komentar, kemudian mengeksekusi, sehingga mendorongnya ke dalam sejarah perintah. Anda kemudian dapat memasukkan perintah bantu Anda, kemudian gulir ke atas melalui sejarah perintah ke perintah yang dikomentari, menghapus #dan menyelesaikan perintah yang diperlukan.


Anda harus menekan tombol "home" pada keyboard Anda, menghemat 1 penekanan tombol, dan energi yang diperlukan untuk benar-benar menekannya
Ferrybig

@Ferrybig - ya, itu bagus, meskipun untuk keyboard saya sehari-hari adalah MacBook Pro yang tidak memiliki tombol HOME . The RUMAH setara adalah FN + PANAH KIRI , tapi itu gulungan ke atas terminal.
Digital Trauma

2

Saya mengetik Ctrl+ Zuntuk "menangguhkan" perintah yang saya ketikkan dan ketik perintah lain. Setelah saya menjalankan perintah itu (atau membatalkannya dengan Ctrl+ C), perintah yang ditangguhkan kembali untuk edisi (bahkan mengingat posisi kursor). Sebagai kenyamanan tambahan, jika baris perintah kosong ketika saya mengetik Ctrl+ Z, kunci akan memanggil bgbuilt-in sebagai gantinya (jadi ganda Ctrl+ Zmengirimkan perintah yang sedang berjalan langsung ke latar belakang).

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

(Sebelumnya diposting di Ingat perintah setengah diketik sementara aku memeriksa sesuatu yang terutama memiliki solusi untuk bash, di mana Anda tidak dapat melakukan apa-apa jadi nyaman. Ini adalah versi yang sedikit lebih bagus dari built-in pengikatan M-qkepush-line .)

Ini tidak menjalankan subshell: perintah yang Anda ketik setelah "menangguhkan" yang sebelumnya berjalan di shell yang sama. Ini memungkinkan Anda melakukan hal-hal seperti mengubah direktori saat ini jika Anda sadar setelah mengetik perintah yang Anda maksud untuk menjalankannya di direktori yang berbeda. Jika Anda ingin menjalankan contoh shell baru, Anda dapat menjalankan zshdari pengikatan kunci, tapi saya tidak berpikir itu sangat berguna.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.