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명령(모든 행)을 종료하고 Ctrl+는 Z실행 중인 명령을 배경으로 실행합니다. 귀하의 경우에는 백그라운드에서 실행되고 (출력 억제 및 처리 중지) 명령을 cat계속 실행합니다 .ls

cat프로세스 목록을 확인하여 이를 확인할 수 있으며 프로세스가 여전히 목록에 있음 을 확인할 수 있습니다 .

작업을 포그라운드로 가져오려면 fg명령을 참조하세요.

답변2

그게 node ...;$bash그렇다면푸시pty 입력 버퍼에 넣은 경우 가능한 해결책 중 하나는 대화형 쉘에만 영향을 미치는 방식으로 인터럽트를 종료하도록 tmux터미널을 적절하게 구성하고 대신 개행 문자를 사용하는 것입니다 .trap;

stty noflsh; trap : INT

^처음 두 가지 요구 사항을 충족해야 합니다.

;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 입력은 직렬로 실행될 수 있습니다.

관련 정보