【问题标题】:Cannot SCP a path with spaces from bash script?不能从 bash 脚本中 SCP 带有空格的路径吗?
【发布时间】:2010-12-30 16:12:25
【问题描述】:

我有一个 bash 脚本,它生成要执行的 SCP 命令。代码的相关部分如下所示:

echo $COPY_CMD
$COPY_CMD

我的输出如下所示:

rascher@localhost:~/Desktop/video_final$ ./xfervids.sh scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/ rascher@192.168.1.101的密码: "/media/My: 没有这样的文件或目录 Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": 没有那个文件或目录

但是,当我将输出的第 2 行:scp "/media/... 复制并粘贴到终端时,它可以工作。

我做错了什么?我已经尝试在“我的书”("My\ Book")中转义空间,放置两个\ 字符而不是一个("My\\ Book"),但我无法让它表现得一致。帮忙?

【问题讨论】:

    标签: linux bash shell scp


    【解决方案1】:

    当路径名中有空格时,您必须非常小心。

    在上下文中,您可能需要:

    eval $COPY_CMD
    

    这次你不需要在变量周围加上引号。

    【讨论】:

    • 完全不知道eval bash 命令。谢谢!
    【解决方案2】:

    您应该阅读 this discussion 了解如何以及为什么避免将命令放入变量中,以及阅读 this discussion 了解 eval 的安全隐患。

    您可能希望以这种方式使用变量的一个原因是记录或显示脚本执行的操作。正如您所发现的,能够正确引用或转义空格等会出现问题。一种实现您可能需要的方法是使用set -xset +x 在脚本中的各个点打开和关闭此类输出。

    【讨论】:

    • 对于我的小型家庭 dvd 刻录脚本来说可能有点矫枉过正,但还是很好的信息。
    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2021-12-19
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多