2017-04-19 68 views
0

我試圖在我的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目標腳本。

+0

在我的系統上,消息立即顯示,但提示只在我點擊返回鍵後重新顯示。那也是你的經歷嗎? – Fred

+0

@Fred不,對我來說,我需要在看到任何東西之前先進入。然後打印消息,然後我需要再次點擊輸入才能讓我的提示恢復。你看到的行爲更接近我想要的。我更新了我的帖子,包括udev規則和目標腳本,也許是在那裏的延遲? – awm129

回答

0

我相信會發生這種情況,因爲您在陷阱中的命令是在後臺運行的。

嘗試設置陷阱命令一樣:

trap deviceadded SIGUSR1 

,看看會發生什麼。

+0

將陷阱處理程序放在前臺 - 使用您的代碼 - 似乎給了我在原始文章中看到的相同的延遲執行。 – awm129

相關問題