如何直接执行子shell

如何直接执行子shell

我有这个:

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

相关内容