在bash中没有使用日期变量的此类文件或目录

时间:2015-03-08 08:12:08

标签: bash

目前正在尝试编写Bash脚本以自动创建名称为今天的.txt文件的日期(使用NOW_FILE var),然后将今天的日期追加到该文件(使用NOW_STRING var)。

附件是剧本:

SAVE_PATH='~/Desktop/' # Set the save path               
NOW_FILE=$(date +"%B_%d_%Y") # Date used for the file name        
NOW_STRING=$(date +"%B %d %Y %r") # Date used within the entry      

echo $NOW_STRING > $SAVE_PATH$NOW_FILE.txt # Output the date to the file 
$EDITOR $SAVE_PATH$NOW_FILE.txt # Open the file with the default editor

如果我执行脚本,我得到的错误是:

 ~    echo $NOW_STRING > $SAVE_PATH$NOW_FILE.txt 
-bash: ~/Desktop/March_08_2015.txt: No such file or directory

但是,如果我取出变量,并直接执行代码sans vars,如下所示:

echo $(date +"%B %d %Y %r") > ~/Desktop/$(date +"%B_%d_%Y").txt

将日期附加到文件的第一行是没有问题的。

我对Bash很感兴趣,所以也许我在脚本中遗漏了一些内容,比如没有将我的变量与非var字符串分开..

1 个答案:

答案 0 :(得分:1)

您的问题是~扩展。现在你的脚本很热。

SAVE_PATH="$HOME/Desktop/"

应该做的伎俩。如果主路径可以包含空格,请确保在任何地方引用该变量(因此请在任何地方引用它以确保安全)。

或者,您可以使用:

SAVE_PATH=~/Desktop/

SAVE_PATH=~/"Some Path With Spaces/"

来自bash manual,§3.5.2 Tilde扩展

  

如果一个单词以未加引号代字号('〜')开头,则所有字符直到第一个未加引号的斜杠(或所有字符,如果没有未加引号的斜杠)被认为是波浪号前缀。如果没有引用tilde-prefix中的任何字符,则代字号后面的波浪号前缀中的字符将被视为可能的登录名。如果此登录名是空字符串,则将波形符替换为HOME shell变量的值。如果未设置HOME,则替换执行shell的用户的主目录。否则,tilde-prefix将替换为与指定登录名关联的主目录。

     

[...](关于~+~-的信息)