【问题标题】:shell script to copy files from one directory to another用于将文件从一个目录复制到另一个目录的 shell 脚本
【发布时间】:2015-07-19 16:29:49
【问题描述】:

尝试编写一个简单的脚本来复制 OS X 10.9 中的一些文件。 这是内容..

SRC_DIR="~/Library/Preferences-Old"

DST_DIR="~/Library/Preferences"

FILEN="test.txt"

cp $SRC_DIR/$FILEN $DST_DIR

给我输出:

cp: ~/Library/Preferences-Old/test.txt: No such file or directory

当然,以上是错误的。终端中完全相同的 cp 命令直接可以解决问题。我在这里做错了什么?

【问题讨论】:

标签: shell scripting terminal


【解决方案1】:

~ 是“如有疑问,请引用”规则的少数例外之一。正如其他人指出的那样,引用的~ 不会扩展。但是,您仍然可以引用字符串的 rest

SRC_DIR=~"/Library/Preferences-Old"
DST_DIR=~"/Library/Preferences"

请注意,根据分配给两个*_DIR 变量的值,引用分配的值是不够的;你仍然需要引用他们的扩展。

FILEN="test.txt"

cp "$SRC_DIR/$FILEN" "$DST_DIR"

【讨论】:

    【解决方案2】:

    如前所述,双引号禁用 ~ 扩展。

    更好的方法是使用HOME变量:

    SRC_DIR="$HOME/Library/Preferences-Old"
    DST_DIR="$HOME/Library/Preferences"
    

    【讨论】:

      【解决方案3】:

      您的双引号会阻止 shell 将您的 ~ 转换为实际路径。观察:

      $ echo ~
      /home/politank_z
      
      $ echo "~"
      ~
      

      ~ 不是实际位置,它是主目录路径的简写。

      【讨论】:

        猜你喜欢
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 2017-11-18
        • 2013-06-01
        • 2020-06-22
        • 2014-08-12
        相关资源
        最近更新 更多