这个示例 bash 启动脚本有什么作用?

这个示例 bash 启动脚本有什么作用?

我正在尝试在我的计算机(Mac OS X 10.7.4)上设置 GNU Octave。我是终端使用新手,我需要帮助来理解以下脚本实际上的作用:

if [ -f ~/.bashrc ];then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;. ~/.bashrc<br>
fi<br>
PATH=$PATH:/usr/local/bin<br>
BASH_ENV=~/.bashrc<br>
export BASH_ENV PATH<br>
export GNUTERM=aqua<br>
alias octave="/Applications/Octave.app/Contents/Resources/bin/octave"<br>
alias gnuplot="/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot"<br>

(取自此处:http://wikibox.stanford.edu/me112/index.php/Main/OctaveMatlabNotes

因此,此脚本以简单的条件 if 语句开始。我不明白条件表达式 - -f 和 .bashrc 是什么?语句 . ~/.bashrc 实际上起什么作用?

然后定义了 2 个变量 PATH 和 BASH_ENV。为什么要导出它们?为什么即使没有在任何地方定义,也会导出 GNUTERM=aqua?

我所需要的只是一个脚本,它允许我通过在终端中输入 octave 来运行 Octave。我不需要 gnu plot 的别名。

谢谢

答案1

[ -f ]测试文件是否存在。

波浪号~是 shell 中主目录/用户目录的简写。您的个人文件存储在那里。~/.bashrc如果存在 ,则是另一个bash启动文件,位于您的主目录中,通常在您以交互方式启动时运行bash(也就是说,当您不只是调用bash来执行预先存在的bash脚本文件时)。您正在查看的示例文件可能是一个.profile,它是另一个 shell 启动脚本,通常只在您第一次登录系统时运行。如果您有只想在登录时运行的命令,可以将它们放入 中~/.profile。如​​果您有设置交互式 shell 环境的命令(例如,使命令更容易调用的别名),那么您可以将它们放入 中.bashrc。由于登录 shell 也是交互式 shell,因此您通常希望您的.profile也加载(“源”)您的.bashrc

当您的 shell 查找要运行的命令时,它会查阅环境变量PATH。此行将其导出,以便您从 shell 调用的其他命令知道在哪里可以找到其他命令。它还将目录添加到,/usr/local/bin以便PATHshell 及其运行的程序也在那里查找命令。

BASH_ENV定义bash在非登录、非交互情况下调用时应运行的启动脚本。我猜想它被导出,这样如果您调用非交互实例bash(例如执行预先存在的脚本文件),它仍将运行您的.bashrc。我通常不希望非交互 shell 运行我的.bashrc,所以我永远不会定义BASH_ENV您找到的此示例文件中定义的方式。

GNUTERM被定义为字符串aqua。它被同时定义和导出。由于您使用的是 Mac,可能没有安装 XWindows (X11),这会告诉您的 GNUTerm/GNUPlot/GNUOctave 环境运行什么工具来将您的图表绘制到屏幕上。可能水语,如果您还没有安装,您可能需要确保已经安装。我不了解 GNUOctave/GNUPlot/GNUterm/aquaterm 生态系统的整个 Mac 版本,所以我无法就具体细节向您提供建议。

相关内容