LINUX.ORG.RU

Команда read

 , , ,


0

1

Есть скрипт, который принимает данные с порта и отправляет символ обратно в порт(закомментированые строки) или просто пишет в консоль. Я так понимаю, read постоянно ждет ввода и остальные процессы забиваются и не выполняются? Как сделать так, чтобы только при получении чего-либо на порт начинала работать команда read? Через if сначала работало, а теперь пишет «ожидается использование унарного оператора». Подскажите, пожалуйста, как реализовать чтение с порта только если на порт что-то идет определенное(слово/символ)?

#!/bin/bash
while [ 0 ]
do
if [ read R </dev/ttyUSB0 ]
then
#if [ "$R" = "Sleep" ]
#then 
#echo 'O'> /dev/ttyUSB0
echo shut
#fi
fi
done


Последнее исправление: Da3z1e (всего исправлений: 1)

Я бы для такой задачи взял не баш уже, а что-то посерьёзнее. Python или любой другой более полноценный скриптовый.

Psych218 ★★★★★
()

А какие у тебя «остальные процессы»? Если им для работы нужны данные, которые читает read, то они и не могут работать. А если эти процессы не зависят от read, то почему они не отдельные, ну, процессы?

legolegs ★★★★★
()
Ответ на: комментарий от Psych218

Я просто не совсем уверен, смогу ли я реализовать все из баш-скрипта на Пайтоне

#!/bin/sh
set -x

IDLE_TIME=$((5000))

trigger_cmd() {
    zenity --question --title="Бездействие пользователя" \
        --text="Вы возле компьютера?" \
        --timeout=10
 if [ $? -eq "0" ]
 then
		triggered=false
        sleep_time=$((IDLE_TIME-idle+100))
	else echo 1> /dev/ttyUSB0
		triggered=false
        sleep_time=$IDLE_TIME
 	fi
}

sleep_time=$IDLE_TIME
triggered=false

	while [ 0 ]
	do
	if [ read R</dev/ttyUSB0 ]; then
			if [ "$R" -eq "Sleep" ]; then 
					echo "Test"
			fi
	fi
    	idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        	if ! $triggered; then
            	trigger_cmd
        	fi
    fi
	sleep 1
	done


Da3z1e
() автор топика
Ответ на: комментарий от legolegs

Ну данные с порта читает только участок с read, а некоторые другие участки кода могут только отправлять данные в порт(echo). Полная версия скрипта указана выше в ответе первому комменту.

Da3z1e
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.