我试图在我的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