#sh #dd
#sh #dd
Вопрос:
Я пытаюсь изменить код, найденный здесь https://retropie.org.uk/forum/topic/17924/detect-idle-state-power-off-screen таким образом, он мог бы отслеживать два ввода js одновременно. Как я могу этого добиться?
Я борюсь с этой частью
inputActive=$(
timeout ${inputWindow}
dd
if=/dev/inputs/js0
of=/dev/null
count=${inputCount}
>/dev/null 2>amp;1;
echo $?
)
if [ ${inputActive} -eq 0 ]; then
итак, если в js0 есть активность, она вернет 0.
Я хотел бы иметь что-то вроде
inputActive=$(
(
timeout ${inputWindow}
dd
if=/dev/inputs/js0
of=/dev/null
count=${inputCount}
>/dev/null 2>amp;1;
echo $?
);
(
timeout ${inputWindow}
dd
if=/dev/inputs/js1
of=/dev/null
count=${inputCount}
>/dev/null 2>amp;1;
echo $?
)
)
как только активность обнаружена на любом входе, она должна идти дальше, а не ждать, пока все задачи будут выполнены.
Ответ №1:
Запустите обе команды в фоновом режиме и используйте wait -n
, чтобы дождаться завершения любой из них. (Избавьтесь от всего inputActive=$(...; echo $?)
бизнеса. Это не дает ничего полезного.)
timeout "$inputWindow" dd if=/dev/inputs/js0 of=/dev/null count="$inputCount" amp;> /dev/null amp;
timeout "$inputWindow" dd if=/dev/inputs/js1 of=/dev/null count="$inputCount" amp;> /dev/null amp;
wait -n
Если вы хотите проверить успешность, вы можете использовать wait
непосредственно в if
инструкции:
if wait -n; then
echo "one of them succeeded"
else
echo "one of them failed" >amp;2
fi
Кстати, вы могли бы использовать read
вместо timeout
и dd
. read -N
прочитает определенное количество символов и read -t
установит тайм-аут.
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js0 amp;
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js1 amp;
wait -n
Комментарии:
1. еще раз спасибо тебе, Джон. Мне удалось протестировать это и могу подтвердить, что это работает. Кроме второго варианта. В Raspbian при использовании
read -N "$inputCount" -t "$inputWindow" < /dev/input/js0 amp;
я получаю сообщение об ошибке-bash: read: read error: 0: Invalid argument
, но, как я уже писал ранее, первый вариант соответствует моим потребностям :).2. @AdamKiryluk Я получаю такое же сообщение об ошибке от bash, но оно работает с busybox ash. Однако в busybox отсутствует опция -n. zsh также не поддерживает ожидание. #Джонкугельман, у вас это все еще работает, какую оболочку (и версию) вы используете?