SCP不能用bash脚本中的空格路径?

时间:2009-12-29 03:35:15

标签: linux bash shell scp

我有一个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's password: 
"/media/My: No such file or directory
Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": No such file or directory

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

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

2 个答案:

答案 0 :(得分:5)

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

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

eval $COPY_CMD

这次你不需要变量的引号。

答案 1 :(得分:4)

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

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