我想检查路径是文件还是目录。我知道这条路存在。下面的代码只要没有空间在路径中。如何使这项工作用于空间的名称?我目前有一个带有名称的文件,无法检查它是否远程存在。代码读取:
server=<serverip>
path="/var/lib/Fingerprint log.log"
if ssh root@$server test -d $path
then
echo "Directory"
else
echo "File"
fi
当我有一个空间的路径时,它会失败
test:/var/lib/指纹:二进制操作员预期
如果路径为/var/lib/指纹log.log
根据大多数评论,您需要使用" $ {path}"而不是$路径。
path="/var/lib/Fingerprint log.log"
ssh root@$server test -d $path
简短的答案是您应该像这样运行SSH:
ssh root@$server test -d "'$path'"
or
ssh root@$server "test -d '$path'"
双引号确保在本地系统上扩展了$path
变量,并且单引号传递到远程系统。单引号确保$path
的值仍被视为远程系统上的单个命令行参数。
这是由于SSH如何处理命令行上指定的远程命令。首先,它将所有相关的命令行参数连接到单个空格分隔字符串中。然后,它将该字符串发送到远程系统,并以shell命令运行。
例如:
$ dne='/var/does not exist'
$ ssh localhost ls $dne
ls: cannot access /var/does: No such file or directory
ls: cannot access not: No such file or directory
ls: cannot access exist: No such file or directory
$ ssh localhost ls "$dne"
ls: cannot access /var/does: No such file or directory
ls: cannot access not: No such file or directory
ls: cannot access exist: No such file or directory
$ ssh localhost ls "'$dne'"
ls: cannot access /var/does not exist: No such file or directory