Answer the question
In order to leave comments, you need to log in
How to make it possible to output the program to the console?
There is this script:
read -p "Enter the programm's path with .js: " path
cd "$path"
echo "node main.js"
nodeLogs="$(node main.js)"
q=IFS;IFS=$'\n';nodeLogsArr=($nodeLogs);IFS="$q" #nodeLogs.split("\n")
for logs in ${nodeLogsArr[@]}; do
if ; then
echo "git pull"
pwd="$(pwd)"
(git pull && "/root/test \"$pwd\"")
elif ; then
echo "Process stopped:\n$logs"
fi
done
Answer the question
In order to leave comments, you need to log in
if you need to dynamically - simultaneously output to the console, write to a file and immediately immediately analyze the incoming information line by line, then it’s a little more difficult, although not a little, here’s a small example:
working through a file
#!/usr/bin/env bash
# функции бот1 и бот2 которые постоянно выводят рандомно числа от 0 до 9 с интервалом в 2 секунды
bot1(){
while true; do
echo "Bot1: $[RANDOM%10]"
sleep 2
done
}
bot2(){
while true; do
echo "Bot2: $[RANDOM%10]"
sleep 2
done
}
# путь к лог-файлу куда будем писать логи от ботов
LOG=/tmp/botsLog.txt
# удаляем лог-файл (если ненужно то закоментирвоать)
rm -rf $LOG
# запускаем ботов в фоновом(&) режиме,
# а также начинаем выводит поступающую от них информацию на консоль и писать в общий лог-файл
bot1 | tee -a $LOG &
sleep 1
bot2 | tee -a $LOG &
# функция анализа лог-файла (потока)
analysisLogs() {
# запускаем постоянное построчное чтение поступающих данных в функцию
while read -r data; do
# здесь мы задаём фильтры и то что выполнить если совпадёт условие
case "$data" in
"Bot1: 0" ) echo "Бот 1 выдал ноль"
;;
"Bot2: 0" ) echo "Бот 2 выдал ноль"
;;
esac
done
}
# tail выводит поступающие данные по мере роста лог-файла (мониторит)
# в данном случае мы передаём появляющиеся данные из файла в функцию analysisLogs
tail -f $LOG | analysisLogs
# это необходимо чтобы главная программа преждевременно не завершилась
# пока не завершаться запущенные в ней фоновые(&) потоки
wait
exit
#!/usr/bin/env bash
# бот1 и бот2 просто постоянно выводят рандомно числа от 0 до 9 с интервалом в 2 секунды
bot1(){
while true; do
echo "Bot1: $[RANDOM%10]"
sleep 2
done
}
bot2(){
while true; do
echo "Bot2: $[RANDOM%10]"
sleep 2
done
}
# путь к лог-файлу куда будем писать логи от ботов
LOG=/tmp/botsLog.txt
# удаляем лог-файл
rm -rf $LOG
# создаём именованный канал (FIFO-файл)
mkfifo $LOG
# запускаем ботов в фоновом(&) режиме,
# а также начинаем выводит поступающую от них информацию на консоль и писать в общий fifo-файл
bot1 | tee -a $LOG &
sleep 1
bot2 | tee -a $LOG &
# функция анализа поступающих данных
analysisLogs() {
# запускаем постоянное построчное чтение поступающих данных в функцию
while read -r data; do
# здесь мы задаём фильтры и то что выполнить если сработает условие
case "$data" in
"Bot1: 0" ) echo "Бот 1 выдал ноль"
;;
"Bot2: 0" ) echo "Бот 2 выдал ноль"
;;
esac
done
}
# читаем файл(FIFO-файл) и передаём появляющиеся данные в функцию analysisLogs
cat $LOG | analysisLogs
# это необходимо чтобы главная программа преждевременно не завершилась
# пока не завершаться запущенные в ней фоновые(&) потоки
wait
exit
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question