如果我们在终端会话(屏幕命令)的输出中找到某个单词,是否可以停止它?

问题描述 投票:0回答:1

如果某个单词出现在终端会话中,我想结束它。假设我有三个执行以下操作的脚本:

./script1.sh:

#!/bin/bash
for a in water fish eat book human Mexico USA latin table violence sheep stop dog life; do sleep 2; echo $a;done

./script2.sh:

#!/bin/bash
screen -dmS mysession "/home/user/script1.sh"

第二个脚本在新的终端会话中调用第一个脚本。而且,

./script3(第三个脚本调用第二个脚本)

#!/bin/bash
/home/user/script2.sh | tee /dev/tty | grep -m 1 "violence" &&
for session in $(screen -ls | grep -oP '\d+\.\w+'|cut -d. -f1); do
echo "${session}"; screen -S "${session}" -X quit;done

我打算做的是,当终端会话中出现“暴力”一词时,mysession 会话将终止并返回 bash 提示符。但我的流程不起作用。当我输入

screen -r
时,我看到该单词会跳过并且不会停止终端会话。

bash grep screen tee
1个回答
0
投票

(已测试)简单示例 -

在会话日志文件中搜索关键字 $1, 如果匹配则终止匹配 $2 的会话 id

调用传递关键字和会话ID

cat s3.sh
#!/usr/bin/env bash

echo "args:: keyword:$1 :: session: $2 "

while true
do
    c=$( grep -c "${1}" screenlog.0 ) #
    if [ $c -ge 1 ]
    then
        echo "keyword: ${1} matched"
        sess=$(screen -list|grep "${2}" | awk '{print $1}' )
        echo "screen -S $sess -X quit"
        screen -S $sess -X quit
        exit
    fi
 
    sleep 1 #
done
© www.soinside.com 2019 - 2024. All rights reserved.