6
我正在寫一個bash包裝來學習一些腳本概念。這個想法是在bash中編寫腳本,並在登錄時將其設置爲用戶的shell。SIGINT取消在bash腳本中讀取?
我做了一個while循環,其中read
s和eval
的用戶輸入,然後注意到,無論何時用戶鍵入CTRL + C
,腳本都會中止以便用戶會話結束。
爲了避免這種情況,我困住了SIGINT
,在陷阱裏什麼也沒做。
現在,問題是,當您在命令的一半處鍵入CTRL + C
時,它不會被取消,因爲它可能會在bash上執行 - 它只是忽略CTRL + C
。
所以,如果我輸入ping stockoverf^Cping stackoverflow.com
,我得到ping stockoverfping stackoverflow.com
,而不是我想要的ping 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
xdotool會做的伎倆,以100%的黑客攻擊。你得到一個'^ C^A^K'和一個空行,不會在純粹的bash中顯示(只是'^ C'),但它總比沒有好。無論如何,不依賴於'xdotool'並且避免那些額外的標記 - 比如說,就像bash的作品一樣。無論如何,我沒有得到rtfm邀請......應該調試什麼給我看? – mgarciaisaia
是的,這是一個巨大的破解。但在國家,這是做這項工作。遵循原始想法的正確方法需要通過ioctl訪問文件描述符。 –
@mgarciaisaia關於* debug *可以做什麼以及如何使用它。看看[profiling bash in nanoseconds](http://stackoverflow.com/a/20855353/1765658) –