首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了避免使用子shell进程,是否有可能对while循环进行“去管”?

问为了避免使用子shell进程,是否有可能对while循环进行“去管”?
EN

Stack Overflow用户
提问于 2022-05-17 02:16:02
回答 1查看 40关注 0票数 0

由于管道命令的子处理,我无法调用嵌套循环的中断,例如:

代码语言:javascript
复制
#!/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来终止这个过程,但这只是为了向您展示我想要实现的目标。

EN

回答 1

Stack Overflow用户

发布于 2022-05-17 04:33:18

因为RANDOM是bash变量,而不是命令名,所以$(pidof RANDOM)没有意义。假设您想随机地重复一些任务,请尝试:

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

while true; do
    # do something here
    if (( ( RANDOM % 10 ) + 1 == 10 )); then
        break
    fi
done

或者只是:

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

for (( i = 0; i < RANDOM % 10 + 1; i++ )); do
    # do something here
done

请注意,以前的代码可能重复任务超过10次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72267479

复制
相关文章

相似问题

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