如果某个单词出现在终端会话中,我想结束它。假设我有三个执行以下操作的脚本:
./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
时,我看到该单词会跳过并且不会停止终端会话。
(已测试)简单示例 -
在会话日志文件中搜索关键字 $1, 如果匹配则终止匹配 $2 的会话 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