我正在尝试创建一个脚本,它在for循环中运行2个命令,如下所示:
#!/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)。所以,在我的例子中,陷阱功能不起作用。关于如何停止脚本中的第一个命令,有什么建议吗?
发布于 2021-04-08 11:17:51
尝试:
#!/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:
#!/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时会发生这样的情况:
$ ./trap.sh
first program
^CTrap: CTRL+C received, exit
$ https://unix.stackexchange.com/questions/644104
复制相似问题