我試圖在我的Ubuntu 16.04盒子中插入Android設備時,向我的交互式終端打印一些文本。有沒有辦法讓我的bash陷阱處理程序立即執行?
我提出的解決方案涉及一個自定義udev規則,該規則執行一個腳本,該腳本將kill -SIGUSR1
發送到我係統上的所有bash進程。
udev規則:
ACTION=="add", SUBSYSTEM=="usb", ENV{adb_user}=="yes", RUN+="/bin/bash /script/location/onconnect.sh %k"
onconnect.sh:
if [[ ${*} != *":"* ]]; then
for p in $(ps -U username | grep bash | cut -d" " -f1); do
kill -SIGUSR1 $p
done
fi
上述作品。不過,如果我在終端中按下Enter鍵,似乎我放入環境中的陷阱處理程序纔會被調用。有沒有辦法中斷正在等待命令並立即打印的bash線程?我用它來安裝我的陷阱rc文件看起來是這樣的:
...
function deviceadded() {
echo "you've plugged in a device!"
}
trap "(deviceadded&)" SIGUSR1
...
在我的命令行,它有點像這樣當信號成爲:
[~]$
[~]$ you've plugged in a device!
[~]$ _
但是,文本僅在我進入後顯示。我以前從未使用bash trap
,所以它可能只是誤解它的工作原理。有沒有辦法讓它立即打印?
有沒有更好的方法來解決這個問題?
編輯:添加了udev規則和udev目標腳本。
在我的系統上,消息立即顯示,但提示只在我點擊返回鍵後重新顯示。那也是你的經歷嗎? – Fred
@Fred不,對我來說,我需要在看到任何東西之前先進入。然後打印消息,然後我需要再次點擊輸入才能讓我的提示恢復。你看到的行爲更接近我想要的。我更新了我的帖子,包括udev規則和目標腳本,也許是在那裏的延遲? – awm129