$ 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