如何在 shell 脚本中使用 sshpass 来检查目录是否存在?

how to use sshpass in shell script to check whether directory exists or not?

我有一个shell脚本,它基本上运行在一个环境中,它需要检查目录在另一个环境中是否存在。

我尝试了以下两种方法,但没有成功。

方式一:

if [ -d "sshpass -p PASSWORD ssh root@192.168.16.01 /home/test" ]; then
echo "YES"
fi

方式二:

if [sshpass -p PASSWORD ssh root@192.168.16.01 '[ -d /home/test ]']; then
echo "YES"
fi

if 测试中的方括号不是 if 语法的一部分。 [ 是它自己的命令(也称为 test)。

if 语句的语法大致是 (如果您 真的 好奇,请参阅 Shell Grammar Rules 了解更多信息):

if <command that returns true or false>; then
    <other commands>
fi

您的第一次尝试是不正确的,因为 -d 使用的是目录名称而不是您想要 运行.

的命令的字符串

第二次尝试很接近,只是方括号太多(而且方括号的空间不足)。

从第二次尝试中删除外部方括号,它将起作用(假设 sshpass 正确处理 returning ssh 命令的 return 值:

if sshpass -p PASSWORD ssh root@192.168.16.01 '[ -d /home/test ]'; then
    echo "YES"
fi

sshpass很少使用。

可能与 ssh使用批处理模式相同

sshpass -p PASSWORD ssh -o BatchMode=yes root@192.168.16.01 "if [ -d /home/test ] ; then echo Y ; fi" > a.out

然后您将在 a.out

中收集结果