我编写了这个菜单,它调用了几个脚本。这个脚本之一是
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 的进程组。图形桌面环境
您可以在另一个终端窗口中运行该命令(如果您有图形桌面环境)。
以下 shellscript 使用
xterm
,可以安装但您也可以使用其他终端窗口模拟器,例如
gnome-terminal
或lxterminal
.脚本:
文本屏幕(此方法也适用于图形桌面)
您可以在@RoVo 的答案中使用陷阱方法。
重要的是在运行
trap
命令之前运行命令,你必须用ctrl+中断c。因此,如果您想在整个菜单脚本中使用它,请将其放在开头。
如果您仅在绝对必要时才需要它,请运行一个子shell并将
trap
命令放入子shell中,如@RoVo所示,或者使用脚本:
评论
您的
curl
命令行对我不起作用,因此我调用本地dbus-monitor
来测试使用ctrl+时 shellscript 是否有效c。要添加到@pLumo 的出色答案,您可以定义这样的函数,以缩短每个所需的代码量
case
:然后在
case
: