Menu
從菜單中呼叫的退出腳本而不退出菜單
我編寫了這個菜單,它呼叫了幾個腳本。這個腳本之一是
dbus-monitor --system
因此它通過 dbus 顯示實時流量。
但是當我想退出時,我通常會這樣做
Ctrl
+C
,但這也會退出我的菜單,我只想返回我的菜單。有沒有我可以在 dbus-moniter 之後放置的程式碼,當檢測到退出時,它會再次啟動我的菜單?我的菜單只是另一個 .sh 腳本
或者 ….
- 闡明 - - - - - - - -
我在腳本編寫方面“還沒有”那麼先進;)。這是我呼叫 dbus 腳本的菜單
select opt in "dbus Live Traffic" "option 2" "Main menu" "Quit" do case $opt in "dbus Live Traffic") curl -s -u lalala:hihihi ftp://ftp.somewhere.com/folder/dbuslivetraffic.sh | bash ;; "option 2") do_something ;; "Main menu") main_menu;; "Quit") quit_menu;; esac if [[ $opt != "Main menu" ]] || [[ $opt != "Quit" ]] ; then main_menu fi done
這是我的 dbuslivetraffic.sh 的內容
dbus-monitor --system
現在只有這一行,但也許在不久的將來會有更多的程式碼被添加到這個腳本中。
我真的不明白我需要把
TRAP
@RoVo建議的函式放在哪裡
您可以在子shell 中執行該命令,並
trap
在SIGINT
執行kill 0
時僅終止子shell 的程序組。select opt in a b; do case $REPLY in 1) ( trap "kill -SIGINT 0" SIGINT sleep 10 ) ;; 2) sleep 10 ;; esac done
- 選擇 (1) 將讓您使用
Ctrl
+c
而不會終止菜單。- 選擇 (2) 並按
Ctrl
+c
也會終止菜單。
圖形桌面環境
您可以在另一個終端視窗中執行該命令(如果您有圖形桌面環境)。
以下 shellscript 使用
xterm
,可以安裝sudo apt update sudo apt install xterm
但您也可以使用其他終端視窗模擬器,例如
gnome-terminal
或lxterminal
.腳本:
#!/bin/bash select opt in "dbus-monitor --system" htop exit; do case $REPLY in 1) xterm -e dbus-monitor --system 2>/dev/null ;; 2) htop ;; 3) exit ;; esac done
文本螢幕(此方法也適用於圖形桌面)
您可以在@RoVo 的答案中使用陷阱方法。
重要的是在執行
trap
命令之前執行命令,你必須用ctrl
+中斷c
。
- 因此,如果您想在整個菜單腳本中使用它,請將其放在開頭。
- 如果您僅在絕對必要時才需要它,請執行子shell並將
trap
命令放入子shell中,如@RoVo所示,或者使用bash -c 'trap "kill -SIGINT 0" SIGINT; dbus-monitor --system';;
腳本:
#!/bin/bash echo "Press the Enter key to print out the menu again" trap "kill -SIGINT 0" SIGINT select opt in "dbus-monitor --system" "option 2" "Quit" do case $opt in "dbus-monitor --system") dbus-monitor --system;; "option 2") echo "Hello World";; "Quit") exit;; esac done
評論
您的
curl
命令行對我不起作用,因此我呼叫本地dbus-monitor
來測試使用ctrl
+時 shellscript 是否有效c
。