Linux - linux/bash 명령을 사용하여 Ctrl+C를 보내 특정 쉘 스크립트를 가져옵니다.

Linux - linux/bash 명령을 사용하여 Ctrl+C를 보내 특정 쉘 스크립트를 가져옵니다.

텍스트 입력을 처리하고 예상되는 출력을 표시하는 쉘 스크립트를 작성했지만 예상된 결과를 표시한 후에는 ctrl+c완료될 때까지 기다렸다가 커서를 $_ 공간으로 이동할 수 있습니다. 이것을 ctrl+c쉘 스크립트 자체에 어떻게 포함시킬 수 있습니까 ? 아니면 ctrl+cbash/shell 명령을 사용하는 쉘 스크립트는 무엇입니까?

스크립트는 다음과 같습니다.

sed 's/\xC2\xA0//g' | awk '$1=="|"{if(f){print f" "$2;f=""}else{f=$2}}' filename.txt

파일 이름.txt에는 다음이 포함됩니다. https://justpaste.it/edit/30310895/df1838c844c0fcd1

답변1

당신이 보여주는 파이프라인은 본질적으로

sed expression | awk expression filename

이는 awk파일에서 실행 filename되며 sed표준 입력에서 사용자 입력을 기다리는 동안 아무 작업도 수행하지 않습니다(이때 터미널에 입력하는 모든 내용을 읽습니다).

이 스크립트를 종료하려면 간단히 눌러 Ctrl+D프로세스 입력 종료를 표시 하면 됩니다 sed. 더 이상 읽을 내용이 없다는 것을 알게 되면 sed스크립트가 종료되고 스크립트가 종료됩니다(이것이 스크립트를 "일시 중지"하는 이유입니다).

현재 스크립트는 다음을 실행하는 것과 거의 동일합니다.

awk expression filename
sed expression

...두 명령이 파이프를 통해 서로 통신하지 않기 때문입니다.

당신이 하고 싶은 일은

sed expression filename | awk expression

여기에서는 sed파일에 대한 작업이 수행되고 있으며 awk추가 처리를 위해 결과가 전송됩니다. 파일 이름 없이 시작합니다. 즉, 표준 출력으로 파이프되는 표준 입력에서 읽음을 의미합니다 awk.sed

귀하의 경우에는

sed 's/\xC2\xA0//g' filename.txt | awk '$1=="|"{if(f){print f" "$2;f=""}else{f=$2}}'

(파이프라인이 원하는 대로 작동하는지 모르겠지만 이제 적어도 sed프로세스 awk는 올바르게 전송됩니다.)

답변2

ctrl-c는 "SIGINT" 신호를 보내므로 ^C와 동일한 효과를 보내려면 다음을 사용하십시오.

kill -SIGINT 스크립트의 pid

관련 정보