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