有没有办法让我的bash陷阱处理程序立即执行?

时间:2017-04-19 15:31:23

标签: android bash ubuntu-16.04

当我将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目标脚本。

1 个答案:

答案 0 :(得分:0)

我相信这是因为陷阱中的命令是在后台运行的。

尝试将trap命令设置为:

trap deviceadded SIGUSR1

看看会发生什么。