私はこれを持っています:
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