我正在尝试编写一个 BASH 函数,如果程序 a 或 b 完成,它将执行 x 操作。
例子:
echomessage()
{
echo "here's your message"
if [[sleep 3 || read -p "$*"]]
then
clear
fi
}
在这种情况下:
a = ' sleep 3
' 应该在 3 秒后运行 x
b = ' read -p "$*"
' 应该在提供任何键盘输入时运行 x。
x = ' clear
' 如果程序因睡眠超时或用户按下键盘上的某个键,则会清除回显输出。
答案1
read
有一个超时参数,您可以使用:
read -t 3 answer
如果要read
等待单个字符(默认为整行+ Enter),可以将输入限制为1个字符:
read -t 3 -n 1 answer
正确输入后,返回值将为0,因此您可以这样检查:
if [ $? == 0 ]; then
echo "Your answer is: $answer"
else
echo "Can't wait anymore!"
fi
我想在你的情况下没有必要实现后台作业,但如果你愿意,这里有一个例子:
#!/bin/bash
function ProcessA() {
sleep 1 # do some thing
echo 'A is done'
}
function ProcessB() {
sleep 2 # do some other thing
echo 'B is done'
}
echo "Starting background jobs..."
ProcessA & # spawn process "A"
pid_a=$! # get its PID
ProcessB & # spawn process "B"
pid_b=$! # get its PID too
echo "Waiting... ($pid_a, $pid_b)"
wait # wait for all children to finish
echo 'All done.'