我有一个任务流程是在ubuntu打开很多终端,然后执行指令,确认执行结果中出现某些关键词(表示执行成功)后再打开下一个终端,执行下一个指令,同时上一个终端还不能关,要一直运行,这样每次操作太麻烦了,要花很多时间,所以我想写一个shell脚本去帮我执行,请问应该怎么做?在网上查的资料给出的方法是对指令输出内容grep关键字赋值给变量,然后用正则表达式匹配关键字,若满足条件则执行下一步动作,但这种方法对我貌似不可行,因为我的指令执行之后不是输出一些内容就结束,而是一直在运行,一直在输出,grep关键字赋值会有问题,有没有一种方法可以检测到输出内容出现关键词后,就去执行下一个指令?还有一个问题是shell脚本貌似默认是一个命令结束后再执行下一个命令,我要执行多个指令,并且所有指令都要持续运行的话,是要指定后台执行还是打开新终端再去执行?
20条回答 默认 最新
关注获得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命令来打开新的终端窗口。这样,每个指令都将在单独的终端窗口中执行,而且上一个终端窗口也会保持打开状态。请注意,以上只是一种实现思路,你可以根据实际需求进行调整或者使用其他命令替代。
评论 打赏 举报 编辑记录解决 1无用