1

我有一个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
4

2 回答 2

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
于 2016-04-19T14:08:40.397 回答
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

于 2016-04-19T14:12:21.103 回答