首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不按Ctrl+C的情况下停止命令(使用trap函数失败)

在不按Ctrl+C的情况下停止命令(使用trap函数失败)
EN

Unix & Linux用户
提问于 2021-04-08 11:01:40
回答 1查看 367关注 0票数 2

我正在尝试创建一个脚本,它在for循环中运行2个命令,如下所示:

代码语言:javascript
运行
复制
#!/bin/bash
for ((i=0; i<2; i++)); do
    sudo ./bin/llc test-rx -c 184 
    sleep 5
    trap ctrl_c INT
function ctrl_c() 
{
  echo "Trap: CTRL+C received, exit"
  exit
}
    sudo ./bin/llc rxphylast  
done

第一个命令(Test)在执行时继续运行,并通过按Ctrl+C来停止。我想在bash脚本中停止这个命令,所以我使用了陷阱函数,如代码中所示。但是,当我执行脚本时,第一个命令正在运行,直到我按下Ctrl+C,然后执行第二个命令(rxphylast)。所以,在我的例子中,陷阱功能不起作用。关于如何停止脚本中的第一个命令,有什么建议吗?

EN

回答 1

Unix & Linux用户

发布于 2021-04-08 11:17:51

  1. 定义函数并在循环外部设置陷阱
  2. 在使用函数之前定义它。

尝试:

代码语言:javascript
运行
复制
#!/bin/bash
function ctrl_c() (

{
  echo "Trap: CTRL+C received, exit"
  exit
}

trap ctrl_c INT

for ((i=0; i<2; i++)); do
    sudo ./bin/llc test-rx -c 184 
    sleep 5

    sudo ./bin/llc rxphylast  
done

另一个例子,不使用./bin/llc:

代码语言:javascript
运行
复制
#!/bin/bash

function ctrl_c()
{
  echo "Trap: CTRL+C received, exit"
  exit
}

trap ctrl_c INT

for ((i=0; i<2; i++)); do
    echo first program
    sudo find / -type f > /dev/null
    sleep 5

    echo second program
    sudo find / -type f > /dev/null
done

在第一个find运行时按CTRL+C键,它将打印"Trap: CTRL+C接收,退出“消息并立即退出。在第二个find运行时按Ctrl,它也会这样做。无论sudo是否与find命令一起使用,这都是一样的--我只是把它放在那里,以确保它不是sudo捕获和吃掉Ctrl。

当运行它并在第一个find运行时按Ctrl时会发生这样的情况:

代码语言:javascript
运行
复制
$ ./trap.sh 
first program
^CTrap: CTRL+C received, exit
$ 
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/644104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档