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

Checking if remote directory exists returns exit code 1, but the opposite option gets executed

调用此检查:

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