在 Bash 中创建“别名”有多少种不同的方式?

eth*_*ice 10 shell bash alias

我只知道两种方式:alias foo=barfunction foo() { bar }

我问的原因是-突然在我的一个 bash 会话中-我无法运行该ln命令,因为出现bash错误-bash: /usr/local/.../ln: No such file or directory(其中/usr/local/.../是我的PATH环境变量中的条目之一)。

不过这不是PATH问题,因为如果我运行which ln它会输出预期的二进制文件/usr/bin/ln(如果我指定绝对路径,我可以正常运行)。

我还检查了ln我的aliasfunction声明,但没有任何内容:

$ declare -f | grep ln
$ alias | grep ln
Run Code Online (Sandbox Code Playgroud)

问题仅发生在一个 bash 会话中。如果我启动一个新的 shell,它会再次正常工作,但我想知道在这个特定的 bash 会话中是什么突然导致了这个问题。

关于可能导致这种情况的任何想法?

slm*_*slm 10

使用which命令时要小心。最好使用type ...命令。

$ type ln
ln is /bin/ln
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下whereis命令:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
Run Code Online (Sandbox Code Playgroud)

  • @etherice - Bash 维护命令名称及其所在位置的哈希(键=值列表)。您可以使用 `hash -l` 命令查看列表。它是在您使用命令时动态构建的。 (3认同)