当前位置: 首页 > 知识库问答 >
问题:

从用户输入到包含空格的路径(bash-script)[重复]

陈嘉荣
2023-03-14

我需要提示用户输入文件夹路径,以便将该文件夹从服务器SCP到我的计算机。

因为我知道文件夹名中有一个空格(不幸的是,不能省略),所以我试图让它发挥作用,但我做不到。

#copy.sh
read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/$plot_date Plots/
./copy.sh
Plot date: 2021-09-06 10.51
user@server's password: *******
scp: /home/user/Documents/projects/pages/2021-09-06: No such file or directory
cp: cannot stat '17.10': No such file or directory
#copy.sh
read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/"$plot_date" Plots/

它抛出了几乎相同的错误

scp: /home/user/Documents/projects/pages/2021-09-06: No such file or directory
scp: 17.10: No such file or directory

我尝试将输入保存到另一个变量中,并使用它(省略路径中的字符串)

read -r -p "Plot date: " plot_date
p_date="$plot_date"
scp -r user@server:/home/user/Documents/projects/pages/$p_date Plots/

它抛出与上面相同的错误。

read -r -p "Plot date: " plot_date
p_date="$plot_date"
scp -r "user@server:/home/user/Documents/projects/pages/$plot_date" Plots/

共有1个答案

和和裕
2023-03-14

如果两端都使用bash,则可以使用@q参数展开:

read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/"${plot_date@Q}" Plots/
${parameter@operator}
    Parameter transformation.  The expansion is either a transforma‐
    tion of the value of parameter or  information  about  parameter
    itself,  depending on the value of operator.  Each operator is a
    single letter:

    Q      The expansion is a string that is the value of  parameter
            quoted in a format that can be reused as input.
 类似资料:
  • 我有一个主文件,它使用(从主I do a source)一个属性文件,其中的变量指向路径。 属性文件如下所示: 问题是,我必须使用带空格的路径(我不能改变它)。 我试着用引号避开空白,但到目前为止没有解决方案。 我编辑了路径,单引号的问题是我在路径中使用了另一个变量

  • 问题内容: 这不起作用-vm%JAVA_HOME%/ bin / javaw.exe 当路径包含空格(“程序文件”目录)时,如何在Windows 8上用完整路径替换%JAVA_HOME% 问题答案: 你有试过吗 不要将所有内容都放在一行中。 需要放置包含javaw或java可执行文件的文件夹。在带有eclipse 4.7.1的Ubuntu 18下,我能够使其运行: 如果不起作用,请确认您已在中添加

  • 问题内容: 我正在使用python进行文件操作。 我有一个文件路径为: 当我使用python打开文件时,它说: 但是,该文件存在于驱动器上。 可能是因为窗口包含空格,所以无法正确获取“ SEM 2”。 如何在窗口路径的路径中处理此类空格? 问题答案: 路径中的空格没有问题,因为您没有使用“外壳”来打开文件。这是Windows控制台上的一个会话来证明这一点。你做错了什么

  • 问题内容: 我有/root/update/test.php文件。还有一个文件/root/connect.php; 该文件有一行 在/root/update/test.php中。有代码 当我运行/root/update/test.php时,它找到connect.php,但是找不到config.php,这给了我 这让我感到困惑,因为这些警告使我似乎似乎在正确地进行所有操作-包含路径为/ root,并且

  • 我是一名计算机科学专业的学生,目前正在从事一项Linux作业,该作业分为多个任务。 我正在处理的当前任务要求我提示用户输入他们的姓名和一天中的时间,然后使用if语句评估输入并输出适当的消息。我还必须查找文件并输出适当的消息。如果文件不存在,我已在下面插入了我的尝试。 执行此代码时,我会收到以下错误消息: 如果有人能给我一些指点或提示,告诉我哪里出错了,那就太好了

  • 当我使用Git Bash(在Windows上)时,我不能在不指定其完整路径的情况下运行任何可执行文件,尽管它位于我的PATH变量中的文件夹中。看来巴什不认识它。为什么啊?我能修好它吗?