您可以在Bash中使用几种不同的方式创建“别名”?


10

我只知道两种方式: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

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

关于什么可能导致此的任何想法?

Answers:


10

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

$ type ln
ln is /bin/ln

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

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz

你是对的!当我跑步时,type ln我明白了ln is hashed (/usr/local/.../ln)这似乎是问题所在,但这到底是什么意思呢?我从未听说过bash中的该功能。
etherice

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

@etherice-我刚刚赞成您的问题,所以您只有4分之遥8-)。问题解决后,您可以接受答案,并认为这是最好的答案。
slm

@etherice-有人刚刚对您进行了投票,所以现在您有16分。
slm

1
谢谢!我跑去hash -r重置了命令路径哈希表,ln现在又恢复了正常工作。
etherice
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.