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