📅  最后修改于: 2023-12-03 15:07:49.287000             🧑  作者: Mango
在shell脚本中,我们通常会运行需要花费时间的命令,比如下载程序、编译程序等等。在命令运行期间,我们可能希望中途终止命令,这时候可以按下Ctrl+c
键中断命令。但是,在shell脚本中,Ctrl+c
可能会导致脚本整个退出,而不是中断当前命令。那么,如何在shell脚本中按Ctrl+c
中断命令呢?下面介绍两种方法。
在shell脚本中,可以使用trap
命令捕获中断信号,并执行相应的操作。例如,我们可以在脚本中添加以下代码,捕获Ctrl+c
信号并中断当前命令:
#!/bin/bash
trap "echo 'Command interrupted'; exit" INT
#运行需要中断的命令
some_command
在上面的例子中,我们使用trap "echo 'Command interrupted'; exit" INT
命令,捕获了INT
信号(即Ctrl+c
),当收到该信号时,将输出Command interrupted
信息,并退出。
另一种方法是使用stty
命令设置终端模式,以忽略Ctrl+c
信号。例如,我们可以在脚本中添加以下代码:
#!/bin/bash
stty -echoctl
#运行需要中断的命令
some_command
在上面的例子中,我们使用stty -echoctl
命令,设置终端模式以忽略Ctrl+c
信号。这样,在命令运行期间按下Ctrl+c
就会直接中断当前命令。
需要注意的是,这种方法会影响到整个终端,包括当前shell和用户可能在终端中执行的其他命令。因此,在使用时需要在脚本末尾恢复终端模式:
#!/bin/bash
#保存原有的终端模式
OLD_STTY=$(stty -g)
#设置终端模式以忽略 Ctrl+c
stty -echoctl
#运行需要中断的命令
some_command
#恢复终端模式
stty $OLD_STTY
上面的代码中,我们在脚本开头保存了原有的终端模式,并在脚本结尾恢复了该模式,以确保不会影响到其他命令的执行。
以上就是在shell脚本中按Ctrl+c
中断命令的两种方法,可以根据实际情况选择使用。