2013-03-19 171 views
0

我在我的bash腳本下列操作之一:bash腳本不解析符號鏈接

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語句不斷評估爲假? pids文件夾本身就是一個符號鏈接,我懷疑Ubuntu不喜歡if語句。

任何想法?

編輯:

,什麼是奇怪的是,當我在它自己的運行if語句,與PID_PATH變量,作爲一個單獨的腳本,(在相同的路徑),它的工作原理100%?

+0

添加雙引號arounf變量! – 2013-03-19 13:20:34

+0

你用'#...'排除了什麼?在測試之前可以改變PID_PATH的值嗎? – chepner 2013-03-19 13:24:50

回答

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 

必須與正在創建的文件,而想要檢查它有點太快,典型的賽車條件問題。

0

一些可能性:

  • 是否PID_PATH包含任何空格或其他字符[^a-zA-Z0-9._-]?您應該雙引號$PID_PATH/the_file.pid以避免空白擴展。
  • 您是否嘗試過echo "$PID_PATH"上線前if
  • 你確定你沒有簡化掉一些可能相關的代碼嗎?
  • 您是否收到任何錯誤訊息?嘗試在文件頂部使用set -o errexit -o nounset -o pipefail
  • 符號鏈接在執行過程中的某個點是否被破壞?
+0

除上述內容外,在腳本中放置'set -x'以跟蹤執行情況,以便您可以清楚地看到'if'語句正在檢查的內容...... – twalberg 2013-03-19 14:09:36