Более простым решением было бы проинформировать пользователя о необходимости нажать Ctrl-C
для выхода из цикла, что выдаст сигнал SIGINT
и завершит сценарий.
Если вы хотите сделать что-то еще перед завершением скрипта, вы можете перехватить сигнал:
cleanup() {
#...
exit 0
}
trap 'cleanup' INT
Кроме того, вы можете запустить одну из них в подоболочке, убедившись, что при выходе из одной из оболочек другая также уничтожается. Таким образом, вы можете заблокировать один из них для ввода, в то время как другой выполняет другие проверки.
#!/bin/bash
i=1
sp="/-\|"
no_config=true
echo "type \"continue\" to exit this while loop if you feel the conditions for continuing sucessfully have been met... "
(
while $no_config
do
printf "\b${sp:i++%${#sp}:1}"
[[ ! $(pidof SupremeCommande) && -f ~/My\ Documents/newfile ]] && no_config=false
sleep 1
done
kill $$
) &
child_pid=$!
while $no_config
do
read -r typed_continue
[[ "$typed_continue" = "continue" ]] && no_config=false
sleep 1
done
kill $child_pid