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

时间:2016-04-19 13:47:41

标签: shell sshpass

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

我试过以下两种方式,但没有运气。

方式1:

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

方式2:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

你的第一次尝试是不正确的,因为-d的目录名不是你想要运行的命令的字符串。

第二次尝试很接近你只有太多的方括号(并没有足够的空格用于那些方括号)。

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

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

答案 1 :(得分:0)

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

中收集结果