代码之家  ›  专栏  ›  技术社区  ›  poundifdef

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

  •  1
  • poundifdef  · 技术社区  · 15 年前

    我有一个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 回复  |  直到 13 年前
        1
  •  5
  •   Jonathan Leffler    15 年前

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

    在这种情况下,您可能需要:

    eval $COPY_CMD
    

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

        2
  •  4
  •   Dennis Williamson    15 年前

    你应该阅读 this discussion 如何避免在变量和 this discussion 对安全的影响 eval .

    以这种方式使用变量的一个原因是记录或显示脚本所采取的操作。正如您所发现的,正确引用或转义空格等会出现问题。做你想做的事的一种方法是 set -x set +x 在脚本的各个点上打开和关闭这种类型的输出。