我想检查路径是文件还是目录。我知道这条路存在。只要路径中没有空格,下面的代码就可以工作。如何使用空格的名称?我目前有一个带有名称的文件,无法检查它是否存在远程。代码如下:
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 / Fingerprint:期望二元运算符
如果path是/ var / lib / Fingerprint log.log
答案 0 :(得分:0)
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
答案 1 :(得分:0)
根据最高评论,您需要使用“$ {path}”而不是$ path。