我可以让bash停止解析并验证某个别名吗?


8

我正在使用Fedora 25,并将以下别名添加到我的bash配置文件中:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

dnf updateinfo info由于https://bugzilla.redhat.com/show_bug.cgi?id=1405191,我无法使用整顿方法)

我的别名可以运行,但是命令运行大约需要10秒钟,并且由于bash在配置文件来源时会解析并验证所有别名,因此创建新的shell会导致10秒钟的挂起。真烦人

有什么方法可以使bash不尝试解析和验证别名-还是仅此一种?

Answers:


9

我最好的猜测是您可能应该在别名定义周围使用单引号

我知道在使用双引号时,shell变量在别名定义阶段(如您所说的解析和验证)和反引号或shell替换(如$(command))被其内容替换。

在这个Unix SE问题中有一个更好的解释!

如果这样做不能使提示再次加载更快,请定义一个shell函数而不是一个别名。

编辑:别忘了将cut参数交换为双引号,例如quixotic。


做到了!您首先回答,所以得到了荣誉。
iLikeDirt

9

bash正在解释带引号的字符串,并且该解释将执行嵌入式dnf check-update命令。这种执行是在别名定义过程中花费的时间,而不是dnf updateinfo您要别名的主要命令。尝试基于的人为示例,sleep并注意其alias本身需要5秒钟的时间:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

使用单引号避免解释:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

不要忘记将cut参数交换为双引号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.