📌  相关文章
📜  在 shell 脚本中按 ctrl-c 运行命令 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:07:49.287000             🧑  作者: Mango

在 shell 脚本中按 ctrl-c 运行命令 - Shell-Bash

在shell脚本中,我们通常会运行需要花费时间的命令,比如下载程序、编译程序等等。在命令运行期间,我们可能希望中途终止命令,这时候可以按下Ctrl+c键中断命令。但是,在shell脚本中,Ctrl+c可能会导致脚本整个退出,而不是中断当前命令。那么,如何在shell脚本中按Ctrl+c中断命令呢?下面介绍两种方法。

方法一:使用 trap 命令

在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 命令

另一种方法是使用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中断命令的两种方法,可以根据实际情况选择使用。