Итак, я пытаюсь создать скрипт, который будет ждать определенной строки в выводе команды, запускающей другой скрипт.
Я столкнулся с проблемой, когда мой скрипт не переместится за эту строку кода
$(source path/to/script/LOOPER >> /tmp/looplogger.txt)
Я перепробовал почти все варианты, которые только мог придумать для этой строки
ie. (./LOOPER& >> /tmp/looplogger.txt
)
bash /path/to/script/LOOPER 2>1& /tmp/looplogger.txt
et c.
По какой-то причине я не могу заставить его работать в подоболочке и иметь остальную часть скрипта go о его дне.
Я пытаюсь запустить сценарий из другого сценария и получить доступ к его выводам, а затем проанализировать строку за строкой, пока не будет найдена определенная строка.
Затем, как только эта строка будет найдена, мой сценарий уничтожит указанный сценарий ( что я знаю, если он получен, тогда родительский скрипт тоже завершится).
Скрипт, который запускает петлитель, а затем пытается его убить-
#!/bin/bash
# deleting contents of .txt
echo "" > /tmp/looplogger.txt
#Code cannot get past this command
$(source "/usr/bin/gcti/LOOPER" >> /tmp/ifstester.txt)
while [[ $(tail -1 /tmp/looplogger.txt) != "Kill me" ]]; do
sleep 1
echo ' in loop ' >> /tmp/looplogger.txt
done >> /tmp/looplogger.txt
echo 'Out of loop' >> looplogger.txt
#This kill command works as intended
kill -9 $(ps -ef | grep LOOPER | grep -v grep | awk '{print $2}')
echo "Looper was killed" > /tmp/looplogger.txt
Я пробовал использовать while IFS= read -r
тоже. для приведенного выше сценария. Но я нахожу этот синтаксис немного запутанным.
Скрипт лупера -
./LOOPER
#!/bin/bash
# Script to test with scripts that kill & start processes
let i=0
# Infinite While Loop
while :
do
i=$((i+1))
until [ $i -gt 10 ]
do
echo "I am looping :)"
sleep 1
((i=i+1))
done
echo "Kill me"
sleep 1
done
Извините за мой очень многословный вопрос.