Scrot 程序的别名在 .bashrc 中不起作用,但在终端中起作用

Alias to Scrot program doesn't work in .bashrc but works in terminal

我正在尝试在 .bashrc 中为 scrot 命令添加别名:

alias scrotn="scrot %Y-%m-%d-%s_$wx$h.jpg -e 'mv $f ~/pictures/screenshots/'"

scrot 命令在我的终端中有效,但是当我尝试 运行 scrotn 时,我收到以下输出:

mv: missing destination file operand after '/home/lain/pictures/screenshots/'

已经尝试将引号添加到 %Y-%m-%d-%s_$wx$h.jpg,切换双引号和单引号并使用 /home/lain/ 代替 ~/。是的,~/pictures/screenshots/ 存在。我想创建一个别名以将其绑定到我的 DWM 配置中的 PrtSc 密钥。 抱歉英语不好。

由于别名被定义为 double-quoted 字符串(内部引号对于 shell 无关紧要) $f 在别名时被扩展(可能是空字符串)被建造。解决此问题的推荐方法是使用函数而不是别名。许多人认为别名已被弃用,因为它们的功能不如函数,正如您所发现的那样难以调试,而且实际上并不比函数简单多少。

结果:

scrotn() {
    [your scrot command line]
}