我的主資料夾中有一個 gnome 運行的應用程式。我現在已經添加了當我按Meta+時要運行的應用程式R(我將其添加到CCSM)。我透過在我的主資料夾中執行來運行該應用程式./gnome-run
。
我在 的輸出中找不到應用程式進程的任何痕跡ps -A
。
問題是,如果我打開 gnome-run 程式並按下組合鍵,我希望應用程式關閉。有沒有辦法創建一個 bash 檔案來檢查應用程式是否正在運行?如果是則關閉它,否則啟動它。
答案1
這個 shell 腳本應該要處理任何程式的啟動和停止:
#!/bin/bash
BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
echo "at least one instance of "$BASECMD" found, killing all instances"
kill $PID
else
echo "no running instances of "$BASECMD" found, starting one"
$1
fi
假設您將其保存在 下~/mystarter
,您可以使用它來執行任何命令~/mystarter <name>
,例如,在您的情況下,將Meta+綁定R到:
~/mystarter gnome-run
並確保腳本可執行:chmod u+x ~/mystarter
.另外,最好將其放在您的某個位置PATH
,這樣您就不必每次都鍵入它的完整位置。
gnome-run
至於沒有出現在 中的事實ps -A
,請確保 gnome run 本身不是啟動實際進程的腳本。檢查ps -A | wc -l
啟動前後是否有差異(這會計算所有正在運行的進程)。
編輯:
既然您已經接受了答案,我想我應該添加對運行具有命令行參數的命令的支持,以便這可能成為一個參考點。運行如下命令:
./mystarter 'cmd args'
例如:
./mystarter 'ncmpcpp -c ~/.ncmpcpp'
該命令只是查找它是否已在運行,但在未運行ncmpcpp
時執行完整命令(帶參數) 。ncmpcpp