如何在 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
中收集结果
我有一个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