在 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,它也不会起作用。我偶尔会看到这种情况,因为设计糟糕的脚本假设它们是从某个路径调用的。