我正在尝试学习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
命令。
我完全不知道为什么会这样。
为什么在此行的开头(而不是结尾)加上引号?
冒号和这行末尾的两个问号是什么?
如何为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
添加目录。为什么有这么多,为什么很少呢?工作吗?”
答案 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"
语法。