Linux中别名命令的脚本在哪里?

Inf*_*ity 11 bash alias

我想向 bash 别名脚本添加一个参数,以便我可以运行

alias -p l='ls -l'
Run Code Online (Sandbox Code Playgroud)

它会永久添加到我的 .zshrc 中。但我无法找到别名的 shell 脚本。

我试过whereis alias,但没有运气。甚至man alias显示别名没有条目。

我看了看,/usr/bin, /usr/share/local/bin但没有运气。谁能指出位置?

编辑:我还尝试通过以下方式查看所有可能的路径 ls $(echo $PATH| tr ':' '\n') | grep alias

ilk*_*chu 17

alias是一个内置命令,因此它不会在任何文件中显示为脚本,也不会显示为函数。该type命令将显示:

$ type alias
alias is a shell builtin 
Run Code Online (Sandbox Code Playgroud)

但是你仍然可以覆盖它。具有相同名称的函数将屏蔽内置函数,除非使用builtin内置函数显式调用它。

所以,这样的事情应该工作:

alias() {
    if [ "$1" = "-p" ]; then
        echo "-p was given";
        shift;
    fi;
    builtin alias "$@";
}
Run Code Online (Sandbox Code Playgroud)

如果要将相同的别名分配打印到文件,则需要小心将其引用正确,以便它可用作 shell 的输入。

像这样的事情可能会做(shift在函数之后添加),但请测试它:printf "alias %q\n" "$@" >> ~/my.alias.file

至于 Bash 与 Zsh 的问题,我认为上述两种方法都适用,但我不是 Zsh 的专家。


顺便说一句,您可能还想注意 Bashalias已经有一个-p选项help alias说:

  Options:
    -p        print all defined aliases in a reusable format
Run Code Online (Sandbox Code Playgroud)

我不知道它是否有任何用处,因为alias不带参数的默认行为也是以可重用的格式打印所有别名。

  • @Infinity,不,它 [必须](https://unix.stackexchange.com/q/382003/170373) [不](https://unix.stackexchange.com/q/168284/170373) 是 `== `. (2认同)