0

私のbashスクリプトの1つに次のものがあります。

PID_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../pids/" && pwd )"

#...

if [ -e $PID_PATH/the_file.pid ]; then
    echo "the_file was found!"
else
    echo "the_file was not found!"
fi

PID_PATHをエコーすると、100%正しいのですが、ifステートメントがfalseと評価され続けますか?pidsフォルダー自体はシンボリックリンクであり、Ubuntuはifステートメントでそれを好まないのではないかと思います。

何か案は?

編集:

そして、奇妙なことに、PID_PATH変数を別のスクリプトとして(同じパスで)使用して、ifステートメントを単独で実行すると、100%機能しますか?

4

2 に答える 2

0

いくつかの可能性:

  • PID_PATHスペースやその他の文字が含まれています[^a-zA-Z0-9._-]か?$PID_PATH/the_file.pid空白の拡張を避けるために、二重引用符を付ける必要があります。
  • あなたはecho "$PID_PATH"前にラインで試しましたifか?
  • 関連する可能性のある例のコードを単純化していないのは確かですか?
  • エラーメッセージは表示されますか?set -o errexit -o nounset -o pipefailファイルの先頭で使用してみてください。
  • 実行中のある時点でシンボリックリンクが壊れていませんか?
于 2013-03-19T13:47:51.520 に答える
0

奇妙なことに、この問題は、.pidファイルが存在するかどうかを確認する前に短い遅延を追加することで修正できました。

PID_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../pids/" && pwd )"

#...

sleep 0.3 
if [ -e $PID_PATH/the_file.pid ]; then
    echo "the_file was found!" 
else
    echo "the_file was not found!"
fi

ファイルがまだ作成されていることに関係している必要がありますが、ファイルを少し早くチェックしたい場合は、一般的な競合状態の問題です。

于 2013-03-20T10:35:20.197 に答える