当我将Android设备插入我的Ubuntu 16.04盒子时,我试图将一些文字打印到我的交互式终端。
我提出的解决方案涉及一个自定义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!
[~]$ _
但是,只有在按Enter键后才会显示文本。我之前从未使用过bash trap
,所以我可能只是误解了它是如何工作的。有没有办法让它立即打印?
有没有更好的方法来解决这个问题?
编辑:添加了udev规则和udev目标脚本。
答案 0 :(得分:0)
我相信这是因为陷阱中的命令是在后台运行的。
尝试将trap命令设置为:
trap deviceadded SIGUSR1
看看会发生什么。