csdn_spider/blog/ds19991999/原创-- 了解Shell环境.md

149 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 原创
了解Shell环境
# 了解Shell环境
### shell 环境
大多数程序用配置文件来存储程序设置, 一些程序会根据环境变量来调整他们的行为。shell 在环境中存储了两种基本类型的数据Shell 变量是 bash 存放的少量数据,剩下的都是 环境变量。另外还有别名和 shell 函数。
```
printenv - 打印部分或所有的环境变量
set - 设置 shell 选项
export — 导出环境变量,让随后执行的程序知道。
alias - 创建命令别名
```
#### 检查环境变量
```
# printenv 命令也能够列出特定变量的数值
alien@localhost:~$ printenv USER
alien
# echo 命令来查看一个变量的内容
alien@localhost:~$ echo $HOME
/home/alien
```
别名无法通过使用 set 或 printenv 来查看。 用不带参数的 alias 来查看别名:
```
alien@localhost:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
```
<th align="center">环境变量</th>|内容
|------
<td align="center">DISPLAY</td>|如果你正在运行图形界面环境,那么这个变量就是你显示器的名字。通常,它是 “:0” 意思是由 X 产生的第一个显示器。
<td align="center">EDITOR</td>|文本编辑器的名字。
<td align="center">SHELL</td>|shell 程序的名字。
<td align="center">HOME</td>|用户家目录。
<td align="center">LANG</td>|定义了字符集以及语言编码方式。
<td align="center">OLD_PWD</td>|先前的工作目录。
<td align="center">PAGER</td>|页输出程序的名字。这经常设置为/usr/bin/less。
<td align="center">PATH</td>|由冒号分开的目录列表,当你输入可执行程序名后,会搜索这个目录列表。
<td align="center">PS1</td>|Prompt String 1. 这个定义了你的 shell 提示符的内容。随后我们可以看到,这个变量 内容可以全面地定制。
<td align="center">PWD</td>|当前工作目录。
<td align="center">TERM</td>|终端类型名。类 Unix 的系统支持许多终端协议;这个变量设置你的终端仿真器所用的协议。
<td align="center">TZ</td>|指定你所在的时区。大多数类 Unix 的系统按照协调时间时 (UTC) 来维护计算机内部的时钟 ,然后应用一个由这个变量指定的偏差来显示本地时间。
<td align="center">USER</td>|你的用户名
#### 建立shell 环境
登录 shell 会读取一个或多个启动文件----虚拟控制台会话:
|文件|内容
|------
|/etc/profile|应用于所有用户的全局配置脚本。
|~/.bash_profile|用户个人的启动文件。可以用来扩展或重写全局配置脚本中的设置。
|~/.bash_login|如果文件 ~/.bash_profile 没有找到bash 会尝试读取这个脚本。
|~/.profile|如果文件 ~/.bash_profile 或文件 ~/.bash_login 都没有找到bash 会试图读取这个文件。 这是基于 Debian 发行版的默认设置,比方说 Ubuntu。
非登录 shell 会话会读取以下启动文件----GUI
|文件|内容
|------
|/etc/bash.bashrc|应用于所有用户的全局配置文件。
|~/.bashrc|用户个人的启动文件。可以用来扩展或重写全局配置脚本中的设置。
除了读取以上启动文件之外,非登录 shell 会话也会继承它们父进程的环境设置,通常是一个登录 shell。
```
alien@localhost:~$ cat .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
...
```
PATH 变量经常(但不总是,依赖于发行版)在 /etc/profile 启动文件中设置,通过这些代码:
```
# 目录 $HOME/bin 就添加到了命令搜索目录列表中
PATH=$PATH:$HOME/bin
```
>
Tips: 把文本附加到一个变量值的末尾
<pre><code>alien@localhost:~$ foo="This is some"
alien@localhost:~$ echo $foo
This is some
alien@localhost:~$ foo="$foo text.";echo $foo
This is some text.
</code></pre>
`export PATH`:这个 export 命令告诉 shell 让这个 shell 的子进程可以使用 PATH 变量的内容。
#### 修改 shell 环境
添加目录到你的 PATH 变量或者是定义额外的环境变量,要把这些更改放置到 .bash_profile 文件中或者其替代文件中根据不同的发行版。例如Ubuntu 使用 .profile 文件)。
对于其它的更改,要放到 .bashrc 文件中。
```
# 别名
alien@localhost:~$ ll
总用量 332
drwxrwxrwx 35 alien alien 4096 9月 18 22:32 ./
drwxr-xr-x 3 root root 4096 11月 29 2017 ../
...
```
```
# 强迫 bash 重新读取修改过的 .bashrc 文件,使用下面的命令:
source .bashrc
```
### 自定义Shell提示符
提示符是由一个环境变量定义的,叫做 PS1是“prompt string one” 的简写)
```
alien@localhost:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
```
具体的修改详见:[https://billie66.github.io/TLCL/book/chap14.html](https://billie66.github.io/TLCL/book/chap14.html) ,这方面不需要了解。