执行了什么?

执行了什么?
$ which -a chia
/usr/bin/chia
/bin/chia
$ ll /bin/chia
lrwxrwxrwx 1 root root 49 janv.  9 08:40 /bin/chia -> /opt/chia/resources/app.asar.unpacked/daemon/chia*
$ ll /usr/bin/chia
lrwxrwxrwx 1 root root 49 janv.  9 08:40 /usr/bin/chia -> /opt/chia/resources/app.asar.unpacked/daemon/chia*
$ ll /opt/chia/resources/app.asar.unpacked/daemon/chia
-rwxr-xr-x 1 root root 5522760 janv.  3 20:57 /opt/chia/resources/app.asar.unpacked/daemon/chia*
$ chia
bash: /usr/lib/chia-blockchain/resources/app.asar.unpacked/daemon/chia: No such file or directory

我迷路了:看来执行的命令 chia 不是列出的命令之一which -a

这到底发生什么事了?

这台计算机的一点历史:包含命令 chia 的 chia 区块链曾经安装在 /usr/lib/chia-blockchain 中。但此目录已不存在。

有人能解释一下 shell 是如何想到从 /usr/lib/chia-blockchain 启动 chia 的吗?

我通过检查 $PATH 中每个目录中是否存在 chia 可执行文件来手动完成“其中 -a 的工作”,并且只发现列出的 2 个......

我也没有定义变量“chia”。(echo $chia => nothing)

提前感谢您花时间回答。

致以最良好的祝愿 Philippe

terdon 要求编辑(感谢):

$ type -a chia
chia is aliased to `/usr/lib/chia-blockchain/resources/app.asar.unpacked/daemon/chia'
chia is /usr/bin/chia
chia is /bin/chia

是的,看起来有一个别名。

$ readlink -f /bin/chia
/opt/chia/resources/app.asar.unpacked/daemon/chia
$ readlink -f /usr/bin/chia
/opt/chia/resources/app.asar.unpacked/daemon/chia

我怎样才能删除这个“chia 别名”?

答案1

因此,如您所见,这里的问题是您有一个别名,chia它指向/usr/lib/chia-blockchain/resources/app.asar.unpacked/daemon/chia。别名优先于其他任何内容,因此如果有别名,则将始终执行别名,而不是任何同名命令。

您需要找到别名的定义位置。此命令应显示您在哪个文件中添加了它:

grep ' chia=' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login ~/.bash_aliases /etc/bash.bashrc /etc/profile /etc/profile.d/* /etc/environment 2> /dev/null

如果未返回任何内容,则说明您已在上面列出的文件之一所引用的文件中定义了别名。然后查找它会更加复杂,但您可以先查看source这些grep -F '. '文件以了解它们的来源。但很有可能,第一个命令会找到它。

找到别名的定义位置后,编辑该文件并删除或注释掉(#在行首添加)该行以删除别名定义。

或者,您可以使用完整路径覆盖别名:

/usr/bin/chia

或者通过转义别名:

\chia

您还可以暂时删除别名,仅适用于当前 shell 会话:

unalias chia

相关内容