サブシェルを直接実行する方法

サブシェルを直接実行する方法

私はこれを持っています:

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

関連情報