查看目录/文件是否存在名称中的空格

时间:2015-05-11 17:46:09

标签: linux bash ssh space test-command

我想检查路径是文件还是目录。我知道这条路存在。只要路径中没有空格,下面的代码就可以工作。如何使用空格的名称?我目前有一个带有名称的文件,无法检查它是否存在远程。代码如下:

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

2 个答案:

答案 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。