通过 ssh 脚本测试 dir - 没有任何反应

通过 ssh 脚本测试 dir - 没有任何反应

我通常使用此处文档运行这样的服务器脚本。

但是,当我测试目录是否存在时,即使测试失败,脚本仍会继续 - 为什么?

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结束,然后本地的其余部分继续。

您还没有展示任何“即使测试失败仍继续”,无论是在远程主机还是本地系统上,因此我们无法自信地测试您正在尝试的内容。

相关内容