目前正在尝试编写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字符串分开..
答案 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将替换为与指定登录名关联的主目录。
[...](关于
~+
和~-
的信息)