在osx / linux上,我希望能够从任何链接到程序的任何地方在terminal上运行命令/脚本。
即我想能够运行:
合金
运行:
/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"
然后我开始了一个新的terminal窗口,但合金命令不起作用。 我错过了什么吗?
添加到PATH的最佳位置不是〜/ .bashrc文件,而是〜/ .bash_profile(如果存在)。 如果.bash_profile不存在,最好的地方是〜/ .profile。 〜部分自动扩展为您的主目录( /home/you )。
当您login并执行bash作为“loginshell”时,它会读取.bash_profile。 如果找不到,它会读取.profile。 在这种情况下, 不会读取.bashrc (除非从.bash_profile内部显式调用)。 我很less把任何东西放在.bashrc中; 如果你想使用一些,应该去那里的一件事是别名。
为了保持兼容一些旧的loginshell(如ksh88),也读取.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"
您可以立即testing它,只需在您的实际bash命令行中input上面的一个,然后尝试查看它是否被识别:
echo "$PATH" which alloy alloy
现在,作为你的.bash_profile或.profile的一个testing,login一个新的会话(不打开另一个terminal窗口,但真正使用你的login名和密码)。
要为所有系统用户启用相同的设置,请根据您的Linux风格更改/ etc / profile或/etc/profile.d。 这是一个系统级configuration文件,可以在〜/ .bash_profile或〜/ .profile之前的每个login名上读取。
一个不需要操纵path的简单解决scheme是简单地在/usr/local/bin或/usr/local/sbin文件夹中创build应用程序的符号链接,因为这些文件夹已经在您的path中。 我经常使用这个程序来安装到/opt , /usr/local或其他默认不在path中的地方。
ln -s /usr/local/share/npm/lib/node_modules/alloy/bin/alloy /usr/local/bin/alloy
当然,如果程序需要从某个工作目录运行,这可能并不总是有效的,如果一个程序有这样的要求,如果你改变了PATH也不行。 我偶尔会看到这个devise错误的脚本,假设他们是从某个特定的path调用的。