配置 Bash
欢迎来到 Bash 的世界,它是 Linux 中使用最广泛的 shell。Bash 的可配置性令人惊讶,当您读完本文时,您将拥有一个更舒适的环境。Bash 不区分内部 shell 变量和外部环境变量。shell 变量是一个变量(通常全部大写),与一个值相关联,并在 shell 之间传递。许多程序使用它们自己的变量,例如 PILOTRATE,它们会检查这些变量。Bash 有它自己的变量,例如 MAIL,这对它很重要。环境变量使用以下语法设置
export VAR=VALUE或分两行
VAR=VALUE export VAR要检查环境变量的值,输入 echo $VAR,或者要查看所有已设置的变量,输入 env。bash 为登录 shell(在控制台上)执行您的 ~/.bash_profile 文件,为非登录 shell(xterms 等)执行 ~/.bashrc 文件。通常您可能只想将一个链接到另一个。如果您在命令行上导出变量或设置别名,它只在该 bash 会话中保持活动状态。您必须将其放在您的登录脚本中才能使其生效。如果您开始拥有一个庞大的 .bashrc 文件并想要更好的组织,您可以将其拆分。通常,人们将他们的 .bashrc 分成别名、变量和函数,而 .bashrc 只是执行其他的。要让您的 .bashrc 执行其他文件,请放入类似这样的行
source FILE
我们将讨论的第一个环境变量是 PS1。PS1 存储一个字符串,该字符串由 bash 解释以用作您的提示符。这是一个 PS1 示例及其生成的提示符
PS1='<\u@\h:\w>$' <blackmad@moomintroll:/etc>
反斜杠字符会被解释,而其他字符则按原样显示。\u 被转换为用户名,\h 被转换为主机名(直到第一个句点),\w 是工作目录。一些最重要的反斜杠字符(也可以在 bash 手册页的 PS1 部分找到)显示在表“解释字符”中。
所有 X 终端模拟器(xterm、rxvt、Eterm 等)中最酷的事情之一是,如果您打印 "\033]0;STRING_HERE\007",终端的标题将更改为 STRING_HERE。尝试通过输入以下内容来执行此操作
echo -n "\033]0;Be Happy\007"
我对此的操作是在我的 .bashrc 函数 xtitle 中放入一个小函数(见列表 1),并且我在设置我的 PS1 变量后调用它,所以在我的 .bashrc 文件的末尾我有这样一行
PS1=''\u@\h:\w>$'' xtitle export PS1这意味着如果我在终端模拟器中,它将设置 TITLEBAR,这是一个字符串,它会将 user@hostname:directory 附加到我的提示符字符串(以便每次我获得新提示符时都会打印),然后导出它。(请注意,如果您的终端模拟器将 $TERM 设置为 xterm* 或 rxvt* 以外的其他内容,您需要在括号前添加另一个 case,带有 | WEIRD_TERM_ENV 在 xterm* | rxvt* 行上。)
与 Bash 一起使用最有用的东西之一是别名。别名只是指示 Bash 将文本字符串解释为其他内容。例如,您可以修复它,以便当您键入 happy 时,Bash 会将其解释为
echo I'm a shiny happy shell
所有别名都采用相同的形式
alias ALIAS="COMMAND"通常,您可能想要更改命令的默认行为,例如 ls。我以这种方式为 ls 设置别名
alias ls="ls -aF --color"ls 现在以彩色方式打印所有文件,并进行分类。\ls 将执行未设置别名的命令。其他时候,您可能会决定定义一个全新的命令,以缩短重复输入的次数。以下是我使用的一些别名
alias mkall=\ "./configure && make && sudo make install" alias whizz="ssh whizziwig@www.whizziwig.com" alias tgz="tar -xvzf" alias ll="ls -aFl" alias ls-d="ls -Sc"这些都节省了时间和击键次数,并且由于您在别名后键入的任何内容仍然会传递给 Bash,因此它只会转换别名的部分。在我的情况下,执行 tgz linux-2.2.14.tar.gz 实际上执行的是 tar -xvzf linux-2.2.14.tar.gz。
$MAIL 变量指定您希望 Bash 轮询新邮件的邮箱。您通常希望将其设置为您的收件箱。我使用 procmail,所以我有很多邮件文件夹。我的收件箱(实际发送给我的邮件发送到的位置)是 /home/blackmad/Mail/inbox,所以当我在那里收到新电子邮件时,Bash 会告诉我:“您在 /home/blackmad/Mail/inbox 中有邮件。”
PATH 变量确定 Bash 在何处以及以何种顺序查找可执行文件。每个目录用冒号 (:) 分隔。Bash 从右到左解释您的路径。假设您的 PATH 设置为 /usr/bin:/bin/:/sbin/:/sbin/。当您输入命令时,Bash 将首先在其内部 shell 函数中查找它,然后是 /usr/bin,然后是 /bin,依此类推,直到它找到命令或到达 PATH 的末尾。通常,您可能只想附加或前缀您当前的 PATH;您可以通过指定以下内容来执行此操作
PATH="$PATH:/next/path:/next_next/path"
或
PATH="/prev/path:$PATH:/next/path" export PATH在第一个示例中,Bash 将在完成当前 PATH 后查找 /next/path 和 /next_next/path。在第二个示例中,Bash 将首先在 /prev/path 中查找。您可能想要将 /usr/local/bin 作为 PATH 的前缀,因为这是手动编译的程序通常所在的位置,并且这些程序通常比您的发行版附带的程序更新。您可能还想将 ~/bin 作为前缀,并在您的主目录中拥有一个 bin 目录,您可以在其中放置程序的自定义版本和脚本(如果您没有该框的 root 权限,这将非常有用)。
