Как запустить две части кодов Bashscript одновременно, когда одна из них бесконечна в то время как цикл
У меня есть этот код сценария bash, и я хочу запустить команду чтения рядом с циклом while, поскольку команда чтения извлекает данные от пользователя и сохраняет их в каком-то файле, а цикл while выполняет проверку на что-то связанное, поэтому любые предложения, такие как делать их в обоих терминалах или что-то подобное
Спасибо
#!/bin/bash
trap "echo \"\" > /home/........./file.txt" SIGINT SIGTERM SIGHUP
while sleep 2
do
read -s -n 1 key
if [[ $key = "" ]]; then
echo >> somefile
else
echo "You pressed '$key'"
fi
clear
done
while sleep $sleepInterval
do
i=0
while read line
do
somecommands
done
2 ответа
Решение
Вот как я это делаю:
#!/bin/bash
a=0
function ACTION ()
{
if [[ "$bb" == "Q" || "$bb" == "q" ]]; then
echo "Good bye!"
exit 0
else
echo -e "\n\nYou pressed $bb.\n\n"
fi
}
while true; do
read -t 1 -n 1 bb && ACTION
echo -ne "Hello $a times. Hit \"q\" to quit."'\r'
a=`echo "$a + 1" | bc`
done
exit 0
И это то, на что Энди ответил в http://stackoverflow.com/ и отлично работает здесь.
Скрипт его (я только что добавил часть ловушки, поскольку он говорит, что терминал будет в странном состоянии, если скрипт будет убит):
#!/bin/bash
trap 'echo -e "\n\n############\n# #\n# Bye bye #\n# #\n############\n" && exit 1' INT
trap 'notify-send "Bye bye" "The terminal has been closed" && exit 1' HUP
if [ ! -t 0 ]; then
echo "This script must be run from a terminal"
exit 1
fi
stty -echo -icanon time 0 min 0
count=0
keypress=''
while true; do
let count+=1
echo -ne $count'\r'
# This stuff goes in _handle_keys
read keypress
case $keypress in
# This case is for no keypress
"")
;;
$'\e[C')
echo "derecha"
;;
$'\e[D')
echo "izquierda"
;;
# If you want to do something for unknown keys, otherwise leave this out
*)
echo "unknown input $keypress"
;;
esac
# End _handle_keys
done
stty sane
Я бы сделал инф. зацикливать свой собственный отдельный скрипт, а затем, когда я запускаю его, ставьте после него
#!/ Bin/ Баш cat /var/log/dmesg ~/inf-loop.sh & ls /var/cache/apt/archive/*.deb