[][][][] 2023-12-07 08:59 采纳率: 0%
浏览 57
已结题

如何用shell脚本执行一个指令后输出结果出现某个关键字再执行下个指令,同时上个指令不能关闭?

我有一个任务流程是在ubuntu打开很多终端,然后执行指令,确认执行结果中出现某些关键词(表示执行成功)后再打开下一个终端,执行下一个指令,同时上一个终端还不能关,要一直运行,这样每次操作太麻烦了,要花很多时间,所以我想写一个shell脚本去帮我执行,请问应该怎么做?在网上查的资料给出的方法是对指令输出内容grep关键字赋值给变量,然后用正则表达式匹配关键字,若满足条件则执行下一步动作,但这种方法对我貌似不可行,因为我的指令执行之后不是输出一些内容就结束,而是一直在运行,一直在输出,grep关键字赋值会有问题,有没有一种方法可以检测到输出内容出现关键词后,就去执行下一个指令?还有一个问题是shell脚本貌似默认是一个命令结束后再执行下一个命令,我要执行多个指令,并且所有指令都要持续运行的话,是要指定后台执行还是打开新终端再去执行?

  • 写回答

20条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-07 09:00
    关注
    获得0.45元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    你可以使用以下方法来实现你的目标:

    首先,你可以使用gnome-terminal或者xterm命令来打开新的终端窗口。例如,使用以下命令来打开一个新的gnome-terminal窗口:

    gnome-terminal -e "bash -c 'command1; exec bash'"
    

    这将在新的gnome-terminal窗口中执行command1指令,并将终端保持在打开状态。

    然后,你可以在脚本中使用while循环来检查指令的输出是否包含关键字。你可以使用grep命令来进行匹配,并使用if语句来判断是否满足条件。例如:

    while true; do
        output=$(command1 | grep "关键字")
        if [[ $? -eq 0 ]]; then
            break
        fi
        sleep 1
    done
    

    以上代码将持续执行command1指令,并使用grep命令来匹配关键字。如果匹配成功,则使用break语句结束循环。

    接下来,你可以使用相同的方式来执行下一个指令,并在循环中判断上一个指令的输出是否满足条件。例如:

    while true; do
        output=$(command2 | grep "关键字")
        if [[ $? -eq 0 ]]; then
            break
        fi
        sleep 1
    done
    

    以上代码将持续执行command2指令,并在循环中检查输出是否包含关键字。

    你可以根据需要,多次重复以上步骤来执行更多的指令。

    最后,你可以将以上代码组合成一个完整的脚本,并在每次循环执行前使用gnome-terminal或者xterm命令来打开新的终端窗口。这样,每个指令都将在单独的终端窗口中执行,而且上一个终端窗口也会保持打开状态。

    请注意,以上只是一种实现思路,你可以根据实际需求进行调整或者使用其他命令替代。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 创建了问题 12月7日