我的一个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%工作?
答案 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
必须与仍在创建的文件有关,同时希望稍微检查一下,这是一个典型的赛车条件问题。