在当前的命令/脚本为^ C之后执行后续命令/脚本

时间:2012-08-29 09:50:30

标签: bash shell scripting

我未能找到问题的答案。我需要能够在使用^ C退出当前的脚本后执行shell命令/ bash脚本。

换句话说: 我有一个正在运行的脚本,就在I ^ C之后,我想要另一个脚本或命令立即启动。怎么做到这一点?

我试过./first.sh; echo something没有运气。

我可以尝试运行同步脚本,其中一个人正在等待/听另一个完成,然后执行清理命令并退出。但是我需要一种方法在一个命令中启动它们。

这个问题最合适的方法是什么?

谢谢

修改 我想我已经得到了...... 从第一个脚本我可以启动另一个脚本&最后所以它去了背景。似乎与^ C退出第一个(第二个连续工作)。 有关更好解决方案的任何建议吗?

3 个答案:

答案 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)

你需要做的事情:

  1. 您需要捕获sigint(ctrl-c),以便按ctrl-c时脚本不会完成
  2. 命令完成后,您需要检查完成命令的原因。如果命令被SIGINT(信号2)中断,则命令的exitcode将为130(128 + 2)。
  3. 你这样做:

    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