调用此检查:
- echo "Everything works fine until now."
- >
if ssh user@$TEST_SERVER '[ -d $BUILD_DIR ]'; then
echo "Directory exists, continuing."
else
ssh user@$TEST_SERVER 'mkdir -p $BUILD_DIR'
fi
- scp some_script.sh user@$TEST_SERVER:$BUILD_DIR/
- echo "I do not even get executed; previous line fails..."
在输出中,我可以看到";目录存在,正在继续"语句:作业继续进行,就好像目录存在于远程服务器中一样,然后启动带有scp
命令的行,未能将脚本文件复制到不存在的目录中。
当我从我的机器上进行检查,启动相同的命令时,我会得到一个退出代码1:
$ ssh user@10.11.12.13 '[ -d /var/www/build_1 ]'
$ echo $?
1
里面出了什么问题?
'[ -d $BUILD_DIR ]'
位于单引号内,BUILD_DIR
未在远程上设置,因此它扩展为空,扩展为[ -d ]
--d
不是空字符串,因此[
成功退出。
您想要:
"[ -d $BUILD_DIR ]"
或更好的:
"[ -d $(printf "%q" "$BUILD_DIR") ]"