有没有办法并行执行两个命令并先结束?
Is there a way to execute two commands in parallel and get the that ends first?
我正在尝试修改此处找到的代码 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>&1;
echo $?
)
if [ ${inputActive} -eq 0 ]; then
所以如果 js0 上有 activity 它将 return 0。
我想要类似
的东西
inputActive=$(
(
timeout ${inputWindow} \
dd \
if=/dev/inputs/js0 \
of=/dev/null \
count=${inputCount} \
>/dev/null 2>&1;
echo $?
);
(
timeout ${inputWindow} \
dd \
if=/dev/inputs/js1 \
of=/dev/null \
count=${inputCount} \
>/dev/null 2>&1;
echo $?
)
)
一旦在任何输入上发现 activity,它应该更进一步,而不是等到所有任务都完成。
运行 两个命令都在后台运行,并使用 wait -n
等待其中一个完成。 (摆脱整个 inputActive=$(...; echo $?)
业务。它没有做任何有用的事情。)
timeout "$inputWindow" dd if=/dev/inputs/js0 of=/dev/null count="$inputCount" &> /dev/null &
timeout "$inputWindow" dd if=/dev/inputs/js1 of=/dev/null count="$inputCount" &> /dev/null &
wait -n
如果要检查是否成功,可以直接在 if
语句中使用 wait
:
if wait -n; then
echo "one of them succeeded"
else
echo "one of them failed" >&2
fi
顺便说一下,您可以使用 read
代替 timeout
和 dd
。 read -N
将读取一定数量的字符并且 read -t
设置超时。
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js0 &
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js1 &
wait -n
我正在尝试修改此处找到的代码 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>&1;
echo $?
)
if [ ${inputActive} -eq 0 ]; then
所以如果 js0 上有 activity 它将 return 0。 我想要类似
的东西inputActive=$(
(
timeout ${inputWindow} \
dd \
if=/dev/inputs/js0 \
of=/dev/null \
count=${inputCount} \
>/dev/null 2>&1;
echo $?
);
(
timeout ${inputWindow} \
dd \
if=/dev/inputs/js1 \
of=/dev/null \
count=${inputCount} \
>/dev/null 2>&1;
echo $?
)
)
一旦在任何输入上发现 activity,它应该更进一步,而不是等到所有任务都完成。
运行 两个命令都在后台运行,并使用 wait -n
等待其中一个完成。 (摆脱整个 inputActive=$(...; echo $?)
业务。它没有做任何有用的事情。)
timeout "$inputWindow" dd if=/dev/inputs/js0 of=/dev/null count="$inputCount" &> /dev/null &
timeout "$inputWindow" dd if=/dev/inputs/js1 of=/dev/null count="$inputCount" &> /dev/null &
wait -n
如果要检查是否成功,可以直接在 if
语句中使用 wait
:
if wait -n; then
echo "one of them succeeded"
else
echo "one of them failed" >&2
fi
顺便说一下,您可以使用 read
代替 timeout
和 dd
。 read -N
将读取一定数量的字符并且 read -t
设置超时。
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js0 &
read -N "$inputCount" -t "$inputWindow" < /dev/inputs/js1 &
wait -n