在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中。这个环境包含了变量、设置、别名、函数以及更多的东西。下面是对Shell环境下一些常用命令的简单介绍,包括每个命令如何使用的例子,以及在命令行下设定你自己的环境来提高效率。
找出你当前的shell
在终端应用中输入下面命令中的任意一个:
ps $$
ps -p $$
或者
echo "$0"
输出范例:
图1:找出当前的shell
找出所有已安装的shell
找到已安装shell的完整路径:
type -a zsh
type -a ksh
type -a sh
type -a bash
输出范例:
图2:找出shell的路径
文件/etc/shells里包含了系统所支持的shell列表。每一行代表一个shell,是相对根目录的完整路径。用这个cat命令来查看这些数据:
cat /etc/shells
输出范例:
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish
临时改变当前shell
只需要输入shell的名字。在下面的例子里,我从bash切换到了zsh:
zsh
这只是临时改变了系统shell。也叫做子shell。要从子/临时shell退出,输入下面的命令或者按下CTRL-D:
exit
找出子shell的层级或临时shell的嵌套层级
每个bash实例启动后,变量$SHLVL的值都会加一。输入下面的命令:
echo "$SHLVL"
示例输出:
图3:Bash shell嵌套层级(子shell数目)
通过chsh命令永久变更系统shell
想要把当前系统shell从bash永久换成zsh?试试这个:
chsh -s /bin/zsh
想把其他用户的shell从bash永久换成ksh?试试这个:
sudo chsh -s /bin/ksh userNameHere
查看当前的环境变量
你需要用到:
env
env | more
env | less
env | grep 'NAME'
示例输出:
TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/6x/45252d6j1lqbtyy_xt62h40c0000gn/T/
Apple_PubSub_Socket_Render=/tmp/launch-djaOJg/Render
TERM_PROGRAM_VERSION=326
TERM_SESSION_ID=16F470E3-501C-498E-B315-D70E538DA825
USER=vivek
SSH_AUTH_SOCK=/tmp/launch-uQGJ2h/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:0
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/go/bin:/usr/local/sbin/modemZapp:/Users/vivek/google-cloud-sdk/bin
__CHECKFIX1436934=1
PWD=/Users/vivek
SHLVL=2
HOME=/Users/vivek
LOGNAME=vivek
LC_CTYPE=UTF-8
DISPLAY=/tmp/launch-6hNAhh/org.macosforge.xquartz:0
_=/usr/bin/env
OLDPWD=/Users/vivek
下面是bash shell里一些常见变量的列表:
图4:常见bash环境变量
注意:下面这些环境变量没事不要乱改。很可能会造成不稳定的shell会话:
SHELL
UID
RANDOM
PWD
PPID
SSHAUTHSOCK
USER
HOME
LINENO
显示环境变量的值
使用下面任意一条命令显示环境变量HOME的值:
## 使用printenv ##
printenv HOME
## 或者用echo ##
echo "$HOME"
# 考虑到可移植性,也可以用printf ##
printf "%s\n" "$HOME"
示例输出:
/home/vivek
增加或设定一个新环境变量
下面是bash,zsh,sh和ksh的语法:
## 语法 ##
VAR=value
FOO=bar
## 设定vim为默认文本编辑器 ##
EDITOR=vim
export $EDITOR
## 考虑安全性,设定默认shell连接超时时间 ##
TMOUT=300
export TMOUT
## 你可以直接使用export命令设定命令的搜素路径 ##
export PATH=$PATH:$HOME/bin:/usr/local/bin:/path/to/mycoolapps
然后,使用printenv或者echo或printf命令查看环境变量PATH,EDITOR,和TMOUT的值:
printenv PATH
echo "$EDITOR"
printf "%s\n" $TMOUT
怎么修改一个现有的环境变量?
下面是语法:
export VAR=value
## 或者 ##
VAR=value
export $VAR
## 把默认文本编辑器从vim改为emacs ##
echo "$EDITOR" ##