为什么 Bash 在我用 Tab 键完成它的名字时会显示我的符号链接脚本的完整路径?

Why does Bash show me the whole path of my symlinked script when I tab complete its name?

我正在尝试执行我自己的命令(test.sh 脚本)。

脚本运行完美,我创建了一个软 link(即 ln -s /home/test.sh ~/bin/test)。

当我从 RHEL 内部的任何地方调用时,它也能完美运行。

但是我的问题是下一个:

当我在命令行中输入命令名称 (test),然后按 Tab 键时,系统会显示完整的我的脚本的路径和名称,即 $ /home/bin/test,我希望它只显示命令的名称 ($ test)。

这可能吗?我该怎么做?

你需要的是一个别名。在 RHEL/CENTOS 系统中,执行以下步骤

  1. vi ~/.bashrc
  2. 添加这一行alias test='/home/test.sh'
  3. source ~/.bashrc(可选步骤,除非您希望当前会话具有更新的 bashrc,否则 restart/logout/login 不需要此步骤!)

如果您想创建自己的命令并让它们以制表符完成而不浏览到它们的目录,您可以先查看 $PATH 变量

echo $PATH

这应该 return 当前路径中的变量列表 如果要编辑路径,请单击 here

我可能会在 /usr/bin

中为您的 link 建议一个常见的位置

某些发行版通常会在他们的 $PATH 中包含 ~/bin,使用这个位置可能会也可能不会解释为什么你的 tab-complete 完成了完整而不仅仅是命令

ln -s /home/test.sh /usr/bin/test

此外,您可能希望根据个人喜好考虑使用 /opt 目录来使事情井井有条,例如

ln -s /opt/scripts/test.sh /usr/bin/test