当grep与其模式不匹配时,我想要摆脱这个循环。 "更高"这里的目标是:
#!/bin/bash
set -ex
i=1
RERUN=0
while [ ${RERUN} == 0 ]
do
((i++))
echo -n "Rerun${i}"| tee >(grep --color=always 'Rerun[123]' ; export RERUN=$?)
echo ${RERUN}
sleep 1
done
我猜它为什么不起作用就是与不同的shell级别有关
答案 0 :(得分:1)
我可能这样写:
#!/bin/bash
generate_output() {
local i=0
while :; do
(( ++i ))
printf 'Rerun%s\n' "$i"
sleep 1
done
}
while IFS= read -r line; do
printf '%s\n' "$line"
[[ $line = Rerun[123] ]] || break
done < <(generate_output)
请注意,不需要使用共享变量在两个进程之间进行通信 - 通过关闭它写入的文件描述符将SIGPIPE发送到generate_output
。
答案 1 :(得分:0)
我找到了解决方案:
#!/bin/bash
# set -x
i=0
RERUN_FILE=$(mktemp)
declare -a TESTDATA=("run" "run" "run" "last" "run" "run" "run" )
while ! $(grep -q 1 ${RERUN_FILE})
do
echo -n ${TESTDATA[$i]}| tee >(grep --color=always 'run'; echo -n $? >${RERUN_FILE})
((i++))
sleep 1
done
rm ${RERUN_FILE} # do your dishes after the meal