Ctrl-Cは行全体を削除し、Ctrl-Zは削除しません。

Ctrl-Cは行全体を削除し、Ctrl-Zは削除しません。

コマンドラインでセミコロンで区切られた複数のコマンドを実行しています。

cmd1; cmd2; cmd3

+を押すと、Ctrl現在実行中のコマンドだけでなく、すべてのコマンドが終了します。C

kartik@kartikpc:~/junk/exp$ ls
test1  test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^C
kartik@kartikpc:~/junk/exp

ただし、Ctrl+はZ現在のプロセスのみを一時停止し、次のプロセスを続行します。

kartik@kartikpc:~/junk/exp$ ls
test1  test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running 
cat is running
^Z
[1]+  Stopped                 cat
test1  test2
kartik@kartikpc:~/junk/exp$

Ctrl動作が分散される理由は何であり、+が+のように動作するようにCする方法はありますか?CtrlZ

私は実際に以下のようにtmuxセッションを介してサーバーを実行していますが、+をnode app.js; $bash実行してサーバーを終了するとbashも終了します。シェルに戻りたいです。私が望む動作を達成するための他のオプションはありますか?CtrlC

【書き直す】

tcshCtrl+CCtrl+と同じ動作ですZ。 bashがCtrlonlt +と同じように、常にすべてのコマンドに対して機能しますC。ただし、ジョブを再インポートするのは再インポートfgするだけでcat、再インポートするわけではありませんls

[kartika@vm-kartika-vnc ~/junk]$ ls
file1  file2
[kartika@vm-kartika-vnc ~/junk]$ echo $SHELL
/bin/tcsh
[kartika@vm-kartika-vnc ~/junk]$ cat; ls
cat is running 
cat is running
^C
[kartika@vm-kartika-vnc ~/junk]$ cat ; ls
cat is running
cat is running
^Z
Suspended
[kartika@vm-kartika-vnc ~/junk]$ jobs
[1]  + Suspended                     cat
[kartika@vm-kartika-vnc ~/junk]$ fg
cat                                     // Pressing ctrl-d here to exit cat
[kartika@vm-kartika-vnc ~/junk]$ 

システムメッセージ:

kartik@kartikpc:~/junk/exp$ uname -a
Linux kartikpc 3.13.0-70-generic #113-Ubuntu SMP Mon Nov 16 18:34:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
kartik@kartikpc:~/junk/exp$ echo $SHELL
/bin/bash

答え1

bash ジョブ制御を探す必要があります。以下は良い説明です。http://web.mit.edu/gnu/doc/html/features_5.html

しかし、簡単に言うと、+はCtrlコマンドC(すべての行)を終了し、+は実行CtrlZのコマンドをバックグラウンドで実行します。あなたの場合は、バックグラウンドで実行され(出力の抑制と処理の停止)コマンドをcat実行し続けます。ls

catプロセスのリストを確認してこれを確認し、プロセスがまだリストにあることを確認できます。

タスクをフォアグラウンドにインポートするには、fgコマンドを参照してください。

答え2

もしそうnode ...;$bashならプッシュpty入力バッファに入れた場合、考えられる解決策の1つは、対話型シェルにのみ影響するように割り込みを終了するようにtmux端末を適切に設定し、代わりに改行文字を使用することです。trap;

stty noflsh; trap : INT

^最初の2つの要件を満たす必要があります。

;aとaの違いは、シェルが\n入力を読み取る方法です。;セミコロンはコマンドリストを区別するという点で改行文字と同じですが、違いは読み取り入力を区別しないことです。たとえば、

prompt$ cat; echo something

this the cat process
this the cat process
^C
prompt$

しかし、ttyドライバを設定したのでいいえ割り込みを受信すると、入力バッファをフラッシュしますstty noflsh

prompt$ cat^Jecho something

this is the cat process
this is the cat process
^C
something
prompt$

bash実際に上記のエスケープ文字の代わりに+ + +readlineキーの組み合わせのリテラル改行を表示しますが、効果は同じです。シェル自体は割り込みを効果的に無視しますが、その子はそうでない場合は割り込みを実行できます。CtrlVCtrlJワイヤー端末自体が中断された入力を完全に破棄しない限り、tty入力は直列に実行できます。

関連情報