我正在使用 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 不尝试解析和验证别名 - 或者只是那一个?
答案1
我最好的猜测是你应该使用单引号围绕别名定义。
我知道当使用双引号时,shell 变量会在别名定义阶段(就像您所说的解析和验证)被其内容替换,以及反引号或 shell 替换,如 $(command)。
更好的解释是Unix SE 问题!
如果这不能帮助再次加快提示加载速度,请定义一个 shell 函数而不是别名。
编辑:不要忘记将 cut 参数替换为双引号,就像 quixotic 提到的那样。
答案2
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
参数换成双引号。