我有这个:
timeout 25 bash -c '
for i in {1..9}; do
if read line < "$my_fifo"; then
if test "$line" != "0"; then
exit 0;
fi
fi
done
'
我真的不喜欢 bash 不能这样做:
timeout 25 (...)
我不明白为什么 () 本身不被视为程序。只是一个匿名程序......无论如何......
我的目标是实现上述目标,但不需要使用,bash -c 'xyz'
因为我不会在引号等中得到语法突出显示。
有解决方法吗?
答案1
Bash 中的一个解决方法可能是定义一个函数,导出它,最后用于timeout 25 bash -c
运行该函数。这更不“直接”,但至少语法突出显示应该起作用。
坦白说,既然timeout
是一个单独的程序,我认为没有办法“直接”执行。timeout 25 (...)
如果 Bash 实现自己的timeout
并将其作为关键字(喜欢time
;time (...)
作品)。
请注意,在下面的示例中,我们将$my_fifo
环境置于timeout
.你原来的代码也需要$my_fifo
在环境中。
#!/bin/bash
my_func() {
for i in {1..9}; do
if read line < "$my_fifo"; then
if test "$line" != "0"; then
exit 0;
fi
fi
done
}
export -f my_func
my_fifo=./fifo timeout 25 bash -c my_func