我正在尝试在 .bashrc 中创建一个别名来为目录添加时间戳。显然,这对我来说效果不太好。例如:
在.bashrc下
alias testit="export testor=$(date +%d);mkdir ~/Desktop/$testor"
结果:
~> testit
mkdir: cannot create directory ‘/home/SJL/Desktop/’: File exists
现在如果我用命令运行
~> export testor=$(date +%d)
~> mkdir ~/Desktop/$testor
目录创建好了,没问题。
现在如果我运行:
~> export testor=$(date +%d);mkdir ~/Desktop/$testor
再次,没问题。
返回使用 .bashrc 中声明的别名是行不通的。
这真的很好奇,因为我已经做过很多很多次类似的事情,但日期格式似乎出现了问题/错误。
我非常感谢您的意见。
答案1
当您创建别名时,$testor
没有值,因此别名将是
export testor=13;mkdir ~/Desktop/
您可以使用 来查看别名扩展为什么alias aliasname
。
要解决此问题,请使用单引号而不是双引号。这会推迟变量的扩展和命令替换,直到您实际调用别名为止。
如果不需要$testor
其他任何东西,只需使用
alias tester='mkdir "$HOME/Desktop/$(date '+%d')"'
阅读您的评论,这也可以:
alias makedir='mkdir "$HOME/Desktop/$(date '+%d')"'
alias copyfile='cp somefile "$HOME/Desktop/$(date '+%d')"
或者,更复杂的 shell 函数允许将任何文件复制到文件夹(使用别名永远无法做到这一点)。
copyfile () {
destfolder="$HOME/Desktop/$(date '+%d')"
if [ -d "$destfolder" ]; then
mkdir "$destfolder"
fi
cp "$1" "$destfolder"
}
这定义了一个名为的函数copyfile
,该函数将用于cp
将命令行上给出的文件复制到带日期标记的文件夹。如果该文件夹不存在,则会创建该文件夹。