2012-12-19 196 views
2

EDIT(由cron或者udev的執行)得到userinput,這個問題可能還沒有完全清楚,短版:從bash腳本

如何彈出一個對話框,要求用戶輸入如果腳本在後臺運行而不是在主動控制檯? /編輯

當我從udev或cron運行一個bash腳本時,它通常會在後臺某處安靜地運行。示例可以插入外部硬盤驅動器運行rsync進行數據備份。因此,不是每次插入硬盤驅動器時都要啓動此操作。

什麼是火了一些用戶輸入對話框,詢問是或否的最起碼的方法是什麼?我可以寫一些PyQt的界面,但我想盡可能少的依賴關係越好,最好交叉窗口管理器,甚至沒有窗口管理器。

謝謝!

+0

如果用戶根本沒有登錄,該怎麼辦? – anishsane

+0

讓我們假設用戶已登錄,我插入硬盤,因爲我想與它交互(所以我已登錄),現在我想啓動一個腳本詢問我是/現在是否要運行備份rsync – gletscher

+0

如果有多個用戶登錄,該怎麼辦?你如何決定誰得到提示?一般來說,在'cron' /'udev'/...中請求用戶交互並不是一個特別好的設計......儘管KDE和Gnome都有可以彈出某些硬件事件通知的applet/widget。也許正在尋找如何定製這些是你需要的... – twalberg

回答

1

編輯2:輕量級(因此像預期的那樣醜陋的)版本xmessage,這很可能是答案的問題,除非你有一個更好的:

xmessage "Do you want to run the backup script?" -buttons yes,no 

http://linux.byexamples.com/archives/87/using-gui-dialog-box/

編輯:所以這是KDialog KDE的,是有什麼很輕的爲X?

http://www.linux-magazine.com/Issues/2009/99/Zenity-and-KDialog

kdialog --title "Do you want to run the backup script?" 
--yesno "Do you want to run the backup script?" 

我目前傾向於zenity,唯一的麻煩是它拉GTK依賴於KDE整個陣列,而是跨平臺,適用於Windows。從本質上講,這是我所尋找的exaclty:

if zenity --question --text="Please press a button."; then 
    zenity --info --text="You pressed Yes\!" 
else 
    zenity --error --text="You pressed No\!" 
fi 

但是希望它會在資源/依賴關係上輕得多。有其他建議嗎?

0

一個簡單的方法是爲自動化腳本簡單地向您發送電子郵件,或者警報,wall用指令(包含實際腳本的位置)。

另一種方法是自動腳本touch/var/lib中的文件,如果5分鐘後文件仍然存在,則繼續執行。這使用戶可以選擇停止進程(通過刪除文件),但保持一些自動化。

+0

我正在尋找更多的立即彈出/ userdialog風格的互動 – gletscher

0

這是不是你應該有cron或udev的處理擺在首位。編寫一個用戶空間守護進程,以監聽適當的D-Bus消息並執行相應的操作。

+0

有沒有很好的理由不使用udev?我有udev處理各種插件或外圍設備,如外部監視器等,爲什麼不應該用於外部硬盤驅動器?我相信你有一個點,只是好奇.. – gletscher

+0

是的。它不會進行用戶交互。 –

+0

真的,有點,這就是問題的原因,可以讓udev使用konsole -e /path/rsync_back.sh啓動腳本並使用read或dialog來獲取userinput(需要檢測本地終端程序,這是我想避免)或使用zenity。編寫一個守護進程可能更不便攜,並且依賴關係更大 – gletscher

0

這應該是在後Linux或超級用戶或serverfault。

但是,在linux下頭號谷歌搜索讀取用戶輸入鏈接回到這裏來的StackOverflow: https://www.google.com/search?q=linux+read+user+input&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=fflb

,所以我想這是不是太關閉基地。

再次,第三或因此谷歌造成了Linux的調用命令的USB設備插件鏈接ServerFault: https://serverfault.com/questions/399698/execute-a-command-when-a-device-is-connected-via-usb

我將離開這兩個結合練習。

+0

我認爲這個問題被理解爲錯誤的方式,我知道如何調用USB udev規則並收集用戶輸入。問題是如何從後臺運行的腳本中收集用戶輸入,而不是在活動控制檯中 – gletscher