用于创建目录的日期标记别名(在 .bashrc 中)

用于创建目录的日期标记别名(在 .bashrc 中)

我正在尝试在 .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将命令行上给出的文件复制到带日期标记的文件夹。如果该文件夹不存在,则会创建该文件夹。

相关内容