同じプロセスで2つの同時タイマーを使用するスクリプトを作成しています。次の例では、5秒ごとにIPを出力しながら60秒ごとにIPアドレスを更新しようとしています。
while true; do
ip=$(curl -4 -sf ifconfig.co)
sleep 60
done &
while true; do
echo $ip
sleep 5
done
ここでの問題は、最初のループが子プロセスを生成するため、アドレス変数をwhile
共有しないことです。ip
ただし、を削除すると、&
スクリプトは2番目のループに入りません。
2つのループを1つに統合できますが、同じプロセスで2つのループを同時に実行するより良い方法があるかどうか疑問に思います。
ベストアンサー1
いいえ。bash
この方法の同時実行またはマルチスレッドはサポートされていません。サブシェルは変数を互いに通信しません。
FIFOまたは一時ファイルを使用して、あるサブシェルから別のサブシェルに情報を渡すことができます。
たとえば、次のようになります。
mkfifo hoppa
while true; do
curl -4 -sf ifconfig.co >> hoppa
sleep 60
done &
while : ; do
read -t1 d <> hoppa
if [ "$d" != "" ] ; then
echo '+'
ipread=$d
else
echo -n '.'
fi
echo $ipread
sleep 5
done &