文件名中存在空格的脚本出现问题

文件名中存在空格的脚本出现问题

我有一个脚本,其中 scp 是从远程主机返回本地的文件。有时文件名包含空格。 scp 不喜欢其文件名中包含空格。由于某种原因,我处理空格的尝试并未产生正确的 scp 路径。

代码:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH [email protected]:/Users/Me/Desktop

结果是

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

将 PATH 括在引号中"$PATH"会产生相同的错误。

将空格交换为转义空格也不起作用,尽管据我所知它应该:

ESC_PATH=${PATH/' '/'\ '}

尽管打印转义路径表明编辑有效:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

答案1

您应该引用声明和用法

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" [email protected]:/Users/Me/Desktop

如果您不引用第一部分,$path则将仅包含第一部分。如果您不引用第二个,scp则会将每个空格分隔的部分视为参数。

(我已更改$PATH为,$path因为$PATH是一个重要的保留变量,您不得将其用于一般目的。)

答案2

我正在尝试与 ssh 非常相似的方法并通过它传递命令行。例如

ssh <somehost> ls -l "$PATH"

我发现简单地定义“$PATH”并没有起到作用——它仍然会抛出错误。但是如果我运行

ssh <somehost> ls -l "\"$PATH"\"

这有效。诀窍是确保将一组附加的“”从 shell 传递到 ssh 命令。

相关内容