我未能找到问题的答案。我需要能够在使用^ C退出当前的脚本后执行shell命令/ bash脚本。
换句话说: 我有一个正在运行的脚本,就在I ^ C之后,我想要另一个脚本或命令立即启动。怎么做到这一点?
我试过./first.sh; echo something
没有运气。
我可以尝试运行同步脚本,其中一个人正在等待/听另一个完成,然后执行清理命令并退出。但是我需要一种方法在一个命令中启动它们。
这个问题最合适的方法是什么?
谢谢
修改
我想我已经得到了......
从第一个脚本我可以启动另一个脚本&最后所以它去了背景。似乎与^ C退出第一个(第二个连续工作)。
有关更好解决方案的任何建议吗?
答案 0 :(得分:3)
./script1.sh && ./script2
,即如果第一次成功,则执行第二次。
./script1.sh || ./script2
,即如果第一次没有成功,则执行第二次。
或在script1中,您可以捕获退出信号并生成第二个进程。像这样:
S1:
#!/bin/bash
trap "./s2.sh" SIGINT
echo "hello"
sleep 100
S2:
#!/bin/bash
echo "goodby"
会话:
$ ./s1.sh
hello
^Cgoodby
答案 1 :(得分:2)
你需要做的事情:
SIGINT
(信号2)中断,则命令的exitcode将为130(128 + 2)。你这样做:
trap "echo ctrl c was pressed" SIGINT
sleep 100
[ "$?" = 130 ] && echo "you've interrupted the previous command with ctrl-c"
示例:
$ bash 1.sh
^Cctrl c was pressed
you've interrupted the previous command with ctrl-c
答案 2 :(得分:0)
Bash Guide for Beginners Chapter 12. Catching signals
这是一个非常简单的示例,从用户那里捕获Ctrl + C. 打印一条消息。当你试图杀死这个程序没有 指定KILL信号,什么都不会发生:
#!/bin/bash # traptest.sh trap "echo Booh!" SIGINT SIGTERM echo "pid is $$" while : # This is the same as "while true". do sleep 60 # This script is not really doing anything. done