나는 긴 명령 목록을 Bash에 붙여넣었고 실행하는 도중에 이를 중지하기로 결정했습니다. Ctrl+Z 및 Ctrl+C는 아무 작업도 수행하지 않습니다. 한 줄씩 계속 실행됩니다. 마지막으로 이 명령을 실행하려면 서비스가 필요했기 때문에 서비스를 중지하고 대신 다른 SSH 인스턴스를 사용했는데 명령이 차례로 실패했습니다.
이 작업을 수행하기 위해 서비스를 중지할 수 없는 경우 목록이 계속되는 것을 어떻게 중지합니까?
답변1
"그럼 하지 마세요"라고 대답하는 질문이다.
이는 나쁜 습관이므로 가능한 한 피해야 합니다. 이미 가지고 있다면 깨뜨려 보세요. 그렇지 않으면 자신이 한 일의 결과를 받아들이십시오.
Ctrl-C텍스트를 셸에 붙여넣으면 마치 사용자가 직접 입력한 것처럼 입력 버퍼가 해당 텍스트로 채워지며, 이후에 버퍼에 입력하는 키 입력 이나Ctrl-Z 기타 모든 항목은 버퍼의 내용이 소비될 때까지 붙여 넣을 때까지 처리되지 않습니다. 대기열에 있고 기다려야 합니다.
대신 명령을 텍스트 편집기에 붙여넣고 필요에 따라 편집한 다음 파일에 저장하고 스크립트를 실행하십시오.
또는 어떤 이유로 임시 파일에 스크립트를 저장하고 싶지 않은 경우 셸의 명령줄 편집기 모드를 트리거하고 명령을 편집기에 붙여넣고 편집한 다음 저장하고 종료하여 실행합니다. 이는 실제로 대량 텍스트를 셸에 붙여넣는 데 따른 바람직하지 않은 결과를 방지하는 방법입니다.
에서는 bash
편집기 모드가 호출 edit-and-execute-command
되고 호출이 전달됩니다 Ctrl-XCtrl-E. 현재 입력 줄을 편집하기 위해 $VISUAL
, $EDITOR
또는 (순서대로) 실행을 시도하므로 emacs
복사-붙여넣기뿐만 아니라 기록의 줄 편집에도 유용합니다. 일부 다른 셸(예: zsh
)에는 비슷한 기능이 있습니다.
답변2
bash에서 콘솔로의 출력을 중지하기 위해 Ctrl+S를 성공적으로 사용했습니다. 이는 추가 명령 실행을 방지하는 부작용도 있습니다. 예를 들어 방금 이렇게 입력했습니다.
sleep 5; date; sleep 5; date
그런 다음 ENTER를 누르고 즉시 Ctrl-S를 눌렀습니다. 그런 다음 잠시 기다렸다가 Ctrl-Q를 누르고 즉시 맹목적으로 를 입력 date
하고 ENTER를 눌렀습니다.
date
Ctrl-S가 출력을 중지하고 1분 일찍 실행했는지(아주 가까운 날짜 두 개를 얻었고 세 번째 날짜는 1분 간격으로 표시됨), 아니면 적어도 두 번째 날짜는 중지했는지 알 수 있을 것 같습니다. 하나 date
, 그런 다음 약속을 잡았고, 그 다음에는 1분 동안 멈춘 후 아주 가까운 약속 두 개를 받았습니다.
나는 두 번째 것을 얻었는데, 이는 출력이 도달하자마자 Ctrl-S가 그것을 중지한다는 것을 증명합니다.
$ sleep 5; date; sleep 5; date
Tue 07 Dec 2021 11:12:19 PM CET
date <--- this I typed after Ctrl-Q
Tue 07 Dec 2021 11:13:17 PM CET
$ date <--- this is my command echoed
Tue 07 Dec 2021 11:13:17 PM CET
$
그러나 bash가 중지되면 다른 터미널에서 종료해야 합니다.