由于管道命令的子处理,我无法调用嵌套循环的中断,例如:
#!/bin/bash
while true
do
$(( ( RANDOM % 10 ) + 1 )) | while IFS= read -r line; do
echo "$line"
if [[ $line =~ "10" ]]
then
kill -9 $(pidof RANDOM)
break
fi
done
done有办法重做吗?当匹配的输出到位时,我只想终止命令进程,然后不再重复循环。
注意:对于这个蹩脚的例子,很抱歉,主要是用PID来终止这个过程,但这只是为了向您展示我想要实现的目标。
发布于 2022-05-17 04:33:18
因为RANDOM是bash变量,而不是命令名,所以$(pidof RANDOM)没有意义。假设您想随机地重复一些任务,请尝试:
#!/bin/bash
while true; do
# do something here
if (( ( RANDOM % 10 ) + 1 == 10 )); then
break
fi
done或者只是:
#!/bin/bash
for (( i = 0; i < RANDOM % 10 + 1; i++ )); do
# do something here
done请注意,以前的代码可能重复任务超过10次。
https://stackoverflow.com/questions/72267479
复制相似问题