检查远程目录是否存在返回退出代码1,但执行相反的选项



调用此检查:

- 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") ]"

相关内容

  • 没有找到相关文章

最新更新