現在のコマンドの途中からサブシェルを実行する


16

私はこのシナリオで頻繁に自分を見つけます。コマンドを入力している最中で、完了する前に他の何かを確認する必要があります。

私の現在の入力で記憶されているサブシェルを開く方法はありますか?

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

私は使っています zsh


2
別のターミナルウィンドウを開くだけではどうですか?
バーマー

@Barmar私にとっては、ほとんどのLinuxシステムでGUIを使用しないので、TTYを切り替える必要があります。つまり、再認証する必要があります。以下のオプションは、はるかに効率的です。
ザカリーブレイディ

3
screenまたはtmuxを使用して、コンソールで複数の仮想端末を取得できます。
バーマー

回答:


16

EscQコマンドバッファを保存し、新しいコマンドを入力できるようにするキーの組み合わせがあります。コマンドの実行後、バッファには以前に入力したものが含まれます。これを完了する前に別のコマンドを実行する必要がある場合は、再度入力できますEscQ

(私はEscQまだ押した後にサブシェルを開こうとしませんでした。)

http://zsh.sourceforge.net/Intro/intro_10.htmlを参照して、「esc-q」を検索してください


これこそまさに私が望んでいたことでした。すぐに戻るのではなく、ネストされたシェルを実行することもできますが、私のユースケースでは、すぐに戻ることは完全に機能します。
パナイオティス


7

これに対する私の解決策は明らかにローテクで不格好ですが、おそらく既にご存じのキーシーケンス、Hit Ctrl+ A、then #、thenに依存していますENTER

これには、#行の先頭にaを挿入してコメントにし、実行して、コマンド履歴にプッシュするという効果があります。次に、補助コマンドを入力し、コマンド履歴を上にスクロールしてコメント化#されたコマンドに移動し、必要に応じてコマンドを削除して完了します。


キーボードの「ホーム」ボタンを押すと、キーを1回押すだけで済み、実際にそれを押すのに必要なエネルギーが節約されます
-Ferrybig

@Ferrybig-はい、それは良いことですが、私の日常のキーボードには、Homeキーを持たないMacBook Proがあります。ホーム同等であるFN + 左矢印が、アップの端末の先頭にスクロールします。
デジタル外傷

2

私はタイプCtrl+ Z私はタイピングだと、別のコマンドを入力し、コマンドを「中断」します。そのコマンドを実行した(またはCtrl+で中止したC)後、中断されたコマンドはエディションに戻ります(カーソルの位置を覚えていても)。追加の利便性として、Ctrl+ を入力したときにコマンドラインが空の場合Z、キーはbg代わりに組み込みを呼び出します(したがって、ダブルCtrl+ Zは実行中のコマンドを直接バックグラウンドに送信します)。

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

(以前は、「半タイプのコマンドを覚える」で投稿しましたが、主にbashのソリューションがあり、それほど便利なことはできません。これは、toの組み込みバインディングのM-qpush-line少し手の込んだバージョンです。)

これはサブシェルを実行しません。前のコマンドを「中断」した後に入力するコマンドは同じシェルで実行されます。これにより、別のディレクトリで実行することを意図したコマンドを入力した後、現在のディレクトリを変更するなどのことができます。新しいシェルインスタンスを実行する場合zshは、キーバインディングから実行できますが、特に便利だとは思いません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.