저는 스크립팅 개념을 배우기 위해 bash 래퍼를 작성하고 있습니다. 아이디어는 bash에 스크립트를 작성하고 로그인시 사용자 쉘로 설정하는 것입니다.SIGINT를 사용하여 bash 스크립트에서 읽기를 취소 하시겠습니까?
나는 read
과 eval
이라는 사용자 입력을 입력 한 후 사용자가 CTRL + C
을 입력 할 때마다 스크립트가 중단되어 사용자 세션이 종료된다는 사실을 알게되었습니다.
이 문제를 방지하기 위해 나는 트랩에서 아무것도하지 않고 SIGINT
을 잡았습니다.
이제 명령의 절반에 CTRL + C
을 입력하면 bash에서 수행하는 것처럼 취소되지 않습니다. 단지 CTRL + C
을 무시합니다.
그래서 ping stockoverf^Cping stackoverflow.com
을 입력하면 내가 원하는 ping stackoverflow.com
대신 ping stockoverfping stackoverflow.com
이됩니다.
그렇게 할 방법이 있습니까?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
당신은 Ctrl 키-A를 보내 xdotool 같은 도구를 사용할 수
xdotool은 100 % 해킹, 트릭을 할 것입니다. '^ C^A^K'와 순수한 bash (단지'^ C')에서는 보이지 않는 빈 줄을 얻습니다. 그러나 그것은 아무것도 아닌 것보다 낫습니다. 어쨌든,'xdotool'에 의존하지 말고, 여분의 마커를 피하기 위해 bash와 똑같이 만드십시오. 어쨌든, rtfm 초대장을받지 못했습니다 ... 무엇을 보여줘야합니까? – mgarciaisaia
예, 이것은 거대한 해킹입니다. 그러나 주에서, 이것은 일을합니다. 원래 아이디어를 따르는 올바른 방법은 ioctl을 통해 파일 설명자에 액세스해야합니다. –
@mgarciaisaia * debug *가 할 수있는 일과 그 사용 방법에 대해. [나노초로 프로파일 링하는 bash] (http://stackoverflow.com/a/20855353/1765658)를 살펴보십시오. –