为El Capitan添加OSX路径

时间:2018-09-06 08:38:59

标签: bash path

我正在尝试学习UNIX。 我正在使用一本名为“邪恶的酷Shell脚本”的书。

有人告诉我.bash_profile包含我的bash登录信息,并且可以为其添加路径,以便在Terminal中输入的命令可以找到我正在编写的脚本。

我当前的bash_profile的内容是:

export PATH=~/bin:$PATH

当我输入echo $PATH时,我得到:

/usr/local/opt/php@7.0/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/Library/Frameworks/Python.framework/Versions/3.3/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

我想添加一条路径,以便-就像书中建议的那样-我可以编写脚本并直接从命令行引用它们,而不必不断导航到该目录以运行它们。

我有一个带文件的文件。当我键入其名称并且位于同一目录中时,它运行良好。我已将该文件移到位于crg/Users/下的文件夹脚本中(即:Users/crg/scripts) 根据这本书,我现在可以更改我的$PATH以包括该目录,以便当我键入该文件名时,程序将运行。

我无法成功完成此操作。 我不知道为什么 每次进行 编辑后,我退出终端并重新打开它,以确保它使用的是新编辑的bash_profile。

按照第5页上的图书说明,我尝试在bash_profile中输入以下内容:

export PATH=”/Users/crg/scripts/:$PATH”

我保存我的bash_profile,退出Terminal,重新打开它,然后键入echo $Path

这是结果:

”/Users/crg/scripts/:??

这是不对的。实际上,这是完全错误的。而且它不允许我从所示的文件夹中运行脚本。在此之前,它似乎也完全覆盖了bash_profile中的内容,因此,在执行“专业”建议的“简单编辑”之后,我无法从终端运行php -version命令。

我完全不知道为什么会这样。

  1. 为什么在此行的开头(而不是结尾)加上引号?

  2. 冒号和这行末尾的两个问号是什么?

  3. 如何为bash_profile添加/添加路径?

更多问题: 当我尝试使用“互联网”自行解决此问题时,我发现此“简单”过程的许多有趣版本:这是“专业人士”建议的:

export PATH="${PATH}:/path/to/program/inside/package"

这与书中所说的非常不同...

这是“专业人士”提供的另一种“操作方法”版本:

export PATH=$PATH:/usr/local/sbin/modemZapp

请注意,这甚至没有引号。在这两种情况下,PATH变量都位于实际路径之前。

为什么有这么多“版本”来执行此简单任务?

有人可以告诉我如何向我的.bash_profile添加路径吗?

更新:我遵循了advice here,(将其添加到etc/paths),但这无效。 当我在新终端中输入echo $PATH时,会得到完全相同的结果:

/usr/local/opt/php@7.0/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/Library/Frameworks/Python.framework/Versions/3.3/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr:/usr/local/share/npm/bin:/Users/fhb/scripts:/opt/X11/bin 

我不禁要留意最后一页的评论:“我已经通过至少十二种不同的方法向$PATH添加目录。为什么有这么多,为什么很少呢?工作吗?”

1 个答案:

答案 0 :(得分:0)

要仔细回答第一个问题,引号是,而不是"。我猜您是在RTF编辑器中而不是在纯文本编辑器中编辑了bash_profile或此帖子。如果您正在编写代码,我会推荐Windows的记事本或* nix的nano。要解决此问题,请将“替换为”。

要回答第二个问题,bash相当宽容,它允许您以多种不同的方式设置字符串变量,即使没有引号也是如此。但是,当字符串包含空格时,可能会遇到问题,例如:/Users/lilHenry/my scripts

"${PATH}"语法只是声明字符串的另一种方法。它的好处是它允许您将变量插值成字符串,如下所示:

prefix="foo" echo "${prefix}bar"

这将输出foobar,而echo "$prefixbar"将不输出任何内容,因为尚未设置变量prefixbar。我建议坚持使用export PATH="/Users/me/bin:$PATH"语法。