通过将命令或脚本添加到 PATH 中,从任何地方在终端中运行它,我做错了什么?

通过将命令或脚本添加到 PATH 中,从任何地方在终端中运行它,我做错了什么?

在 osx/linux 上,我希望能够从任何地方在终端上运行链接到程序的命令/脚本。

即我希望能够运行:

合金

运行:

/usr/local/share/npm/lib/node_modules/alloy/bin/alloy

我猜添加到 .bashrc 是最好的方法?我试过运行:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"

并且:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin/alloy"

然后我启动了一个新的终端窗口,但合金命令不起作用。我是不是漏掉了什么?

答案1

添加到 PATH 的最佳位置不是 ~/.bashrc 文件,而是 ~/.bash_profile(如果存在)。如果 .bash_profile 不存在,最佳位置是 ~/.profile。~ 部分会自动扩展为您的主目录 ( /home/you)。

当您登录并以“登录 shell”身份执行 bash 时,它会读取 .bash_profile。如果未找到,它会读取 .profile。.bashrc 未被读取在这种情况下(除非明确地从 .bash_profile 内部调用它)。我很少在 .bashrc 中放置任何东西;如果你想使用别名,那么应该放在那里。

为了与某些旧的登录 shell(例如 ksh88)保持兼容,这些 shell 也读取 .profile,您也可以在那里使用单独的导出行:

PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"
export PATH

对于 .bash_profile 来说,您的语法是正确的:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"

您可以立即测试它,只需在实际的 bash 命令行中输入上述内容之一,然后尝试查看它是否被识别:

echo "$PATH"
which alloy
alloy

现在,作为对您的 .bash_profile 或 .profile 的测试,请在新会话中登录(不是打开另一个终端窗口,而是真正使用您的登录名和密码)。

要为所有系统用户启用相同的设置,请根据您的 Linux 版本更改 /etc/profile 或 /etc/profile.d。这是一个系统范围的配置文件,每次登录时,请在 ~/.bash_profile 或 ~/.profile 之前读取。

答案2

解决此问题的一种简单方法不需要操作路径,就是简单地在/usr/local/bin或文件夹中创建指向应用程序的符号链接,因为这些文件夹已经在您的路径中。我经常将此用于安装到或默认情况下不在路径中的其他地方的/usr/local/sbin程序。/opt/usr/local

ln -s /usr/local/share/npm/lib/node_modules/alloy/bin/alloy /usr/local/bin/alloy

当然,如果程序要求从某个工作目录运行,这可能并不总是有效,如果程序有这样的要求,即使你更改了 PATH,它也不会起作用。我偶尔会看到这种情况,因为设计糟糕的脚本假设它们是从某个路径调用的。

相关内容