Bash脚本无法解析符号链接

时间:2013-03-19 13:04:49

标签: 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语句会继续评估为false吗? pids文件夹本身是一个符号链接,我怀疑Ubuntu在if语句中不喜欢它。

有什么想法吗?

编辑:

奇怪的是,当我自己运行if语句时,使用PID_PATH变量作为一个单独的脚本(在同一路径中),它100%工作?

2 个答案:

答案 0 :(得分:0)

一些可能性:

  • PID_PATH是否包含任何空格或其他[^a-zA-Z0-9._-]字符?您应该双引号$PID_PATH/the_file.pid以避免空格扩展。
  • 您是否在echo "$PID_PATH"
  • 之前的行上尝试了if
  • 您确定没有简化示例中可能相关的一些代码吗?
  • 您收到任何错误消息吗?尝试使用文件顶部的set -o errexit -o nounset -o pipefail
  • 执行期间某个时刻符号链接是否被破坏?

答案 1 :(得分: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

必须与仍在创建的文件有关,同时希望稍微检查一下,这是一个典型的赛车条件问题。