检查远程目录是否存在 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") ]"
调用此检查:
- 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") ]"