我通常使用此处文档运行这样的服务器脚本。
但是,当我测试目录是否存在时,即使测试失败,脚本仍会继续 - 为什么?
ssh $user@$ip /bin/bash <<SCRIPT
if [[ ! -d ~/.debfiles ]];then
echo "Error: debfiles doesnt exist" 2> ~/error.txt
exit 1
fi
SCRIPT
我从本地计算机运行此程序,并且有问题的服务器是虚拟机。
答案1
正如 Kusalananda 在他的编辑中指出的那样,<<
您所指的语法称为这里的文档。
正如其他评论所指出的,您的脚本的意图有些模糊,但请考虑像这样构建您的脚本:
user=me
ip=myhost
dir=Test
if ssh "$user"@$ip /bin/bash << SCRIPT
[[ ! -d ~/"$dir" ]]
SCRIPT
then
echo "Error: $dir doesnt exist"
exit 1
fi
echo the script continues
那样:
$ ssh me@myhost rm -rf Test
$ ./test.sh
Error: Test doesnt exist
$ ssh me@myhost mkdir Test
$ ./test.sh
the script continues
对于像本例这样简单的此处文档,“此处字符串”也足够了,前提是$dir
不包含任何不合作的字符:
if ssh "$user"@$ip /bin/bash <<< "[[ ! -d ~/$dir ]]"
then
...
答案2
exit
您正在远程服务器上运行。在那里运行的部分退出,因此ssh
结束,然后本地的其余部分继续。
您还没有展示任何“即使测试失败仍继续”,无论是在远程主机还是本地系统上,因此我们无法自信地测试您正在尝试的内容。