将路径添加到.bashrc文件中?

15

目前我正在尝试向我的 .bashrc 文件添加一个 ns-2 的路径,我已经安装了 ns-allinone-2.34,但是在 shell 中输入命令 ns 时会得到结果:command not found。

这是我当前的 .bashrc 文件的样子,我使用 gedit 进行了编辑:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi


# User specific aliases and functions
export PATH=/home/michael/ns-allinone-2.34/bin/ns:/home/michael/ns-allinone-2.34/bin/nam:$PATH

能否有人解释一下为什么这不起作用,或者有可能的解决方案是什么?我正在使用 Fedora 17。


2
你是否启动了一个重新加载了 .rc 文件的新 shell? - choroba
5
这是二进制文件还是目录:/home/michael/ns-allinone-2.34/bin/ns?它应该是包含二进制文件的目录 - Brian Agnew
1
啊,问题解决了。我之前使用的是二进制文件而不是目录,我把结尾的“ns”和“nam”删除后,现在它可以正常工作了! - user1825241
1
好的,我已经添加了一个合适的答案。 - Brian Agnew
2个回答

47

如果您这样导出路径,您希望保留旧路径,请将它包含在内。

export PATH=$PATH:/home/michael/ns-allinone-2.34/bin/

1
他已经完成了,就在结尾处,正如应该的那样。 - tripleee
1
哦,你说得对,我没有往下滚动,期望原始路径在开头... - user1830432
这个答案和被接受的答案之间的确切区别是什么?我的意思是,如果在bin路径之前没有添加“$PATH:”会发生什么? - Cristian Todea
@Todea 路径按照给定的顺序进行搜索。因此,如果您将现有路径放在最后,任何同名的可执行文件都将被调用而不是正常的文件。这通常不是您想要的,并且如果文件夹的权限比系统命令文件夹弱,则会成为安全漏洞:只需在其中创建一个名为“ls”的文件,某人就可以让您运行任意命令。但是,我们也不应该从可写入世界的文件夹中运行 exes :) 因此,当您想要覆盖默认系统命令时,它非常方便,但别名无法解决问题。 - Dewi Morgan

13

PATH 变量应该包含二进制文件所在的 目录,而不是二进制文件本身。

例如,在上面的示例中:

export PATH=/home/michael/ns-allinone-2.34/bin/ns:..

应该实际上是:

export PATH=/home/michael/ns-allinone-2.34/bin:...

我不小心给这个答案点了踩,不知道怎么撤销,请帮帮我 :) - Maystro
@Maystro,你的反对票是有道理的。这可能会擦除所有先前的路径。请参见下面的第二个答案。 - Binu Jasim
@BinuJasim - 你能否解释一下如何将PATH变量修改为正确的目录并删除对二进制文件的错误引用,为什么这样做不起作用? - Brian Agnew
@Brian 我不小心执行了你的命令,把之前设置的所有 PATH 都删掉了。虽然 export PATH=$PATH:/home/michael/ns-allinone-2.34/bin/ 可以保留之前的 PATH,但从技术上讲,你回答问题是正确的。 - Binu Jasim
你明白上面说的是“例如”吗? - Brian Agnew
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接