Bash,总是检查 $PWD 作为路径的一部分?

Chr*_*phe 16 shell usability

背景:我的一位没有 Linux 背景的同事问我使用./before 一些命令而不是其他命令,所以我向他解释了如何PATH工作以及如何选择运行二进制文件。他的回答是这很愚蠢,他只是想不需要./在命令前打字。

问题:有没有办法轻松修改 shell 的行为,使其$PWD始终是第一个项目PATH

Ste*_*itt 56

如果你真的想要,你可以通过添加.到你的路径来做到这一点:

export PATH=".:$PATH"
Run Code Online (Sandbox Code Playgroud)

但是,这是一个坏主意,因为这意味着您的 shell 将优先选择当前目录中的任何命令。如果某人(或某个程序)ls在您经常使用的目录中放置了恶意命令,那么您就有麻烦了...

  • 这是一个很好的观点,尽管移动 . 到路径的末尾,然后导出 PATH="$PATH:." (13认同)
  • 事实上,我记得在你的 `PATH` 开头有 `.` 是普通用户的默认设置(如果我在 HP-UX 上用“sam”创建用户,至少;我不确定旧的 SunOS)。后来出于安全原因删除了这个默认值。如果你把 `.` 作为你的 `PATH` 的最后一项,仍然有人可能会希望出现典型的拼写错误。 (12认同)
  • @Philippos,是的,就像臭名昭著的`/tmp/sl` 恶作剧脚本以此类路径为目标用户。在 Debian 和衍生产品上,安装 `sl` 软件包以了解您键入 `sl` 代替 `ls` 的频率。 (6认同)
  • @jamesqf,实际上,当您想调用当前目录中的命令时,输入`./` 是个好主意。或者,如果您通常的当前目录是 `/project/under/development/bin`,那么将 **that** 添加到您的 `PATH`。这解决了您的开发人员用例。将 `.` 放在你的 `PATH` 的开头是一个坏主意,句号。 (4认同)

Val*_*ami 15

虽然这不是您问题的直接答案,但最佳做法是bin在您的主目录中创建一个目录,如下所示/home/user/bin

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"
Run Code Online (Sandbox Code Playgroud)

把你的个人脚本放在那里。该PATH会在你定义它并没有执行自己的脚本顺序遍历.需要。