2

ファイルが存在する限りスリープシーケンスを実装したいbashシェルスクリプトを書いています。さて、最も単純なケースでは、これは次のようなものです。

while [ -f fileName ]
do
echo "waiting"
sleep 1
done

さて、私の状況では、最初の問題は次のとおりです。fileNameでワイルドカードを使用したい。これは、次のような方法で解決できます。

fileName="$path/$prefix*$suffix" 
while [ -f $fileName ]
    do
    echo "waiting"
    sleep 1
done

ただし、fileNameに一致する複数のファイルがある場合、これは失敗します

./testWait.sh: line 11: [: /home/nrc11/egsnrc/BEAM_TB_jaws/130318110457_s.lock: binary operator expected

これを解決するにはどうすればよいですか?

これが(半)特定の例です:

#!/bin/bash -u

timeStamp="130318110457"
echo "prefix of files: $timeStamp"

beamDir=$(awk '{ print $0 }' $timeStamp/$timeStamp.beamDir)
file="$EGS_HOME$beamDir/$timeStamp*.lock" 

echo $file

while [ -f $file ]
do
    echo "waiting"
    sleep 1
done
4

2 に答える 2

1

展開されたワイルドカードで使用grepして、タイムスタンプの後にアスタリスク以外のものが返されることを確認できます。

while echo $file | grep "^$EGS_HOME$beamDir/$timeStamp"'[^*]' ; do
    echo "Waiting..."
    sleep 1
done
于 2013-03-18T11:22:36.013 に答える
-1

私はこれについて非常にユーザーです、私はこれをずっと前にやってみました、私はLinuxのパッケージであるinotifyと呼ばれるものを使いました、それを試してみてください、それは実際にあなたの人生をより楽にします。

于 2013-03-18T13:31:33.380 に答える