查看本机所有Shell
liaijie@Silence ~ 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/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
使用cat /etc/shells
可以看到本机有多种shell
查看当前使用的Shell
liaijie@Silence ~ echo $SHELL
/bin/zsh
使用echo $SHELL
打印输出当前使用的命令行工具,可以看到我这里使用的是zsh
切换不同的Shell
使用chsh
命令切换shell
liaijie@Silence ~ chsh -s /bin/bash
Changing shell for liaijie.
Password for liaijie:
再次查看当前shell
Silence:~ liaijie$ echo $SHELL
/bin/bash
(以上操作环境为macOS
,这里只是为了演示,我最后又切回了zsh
)
shell的不同模式
以是否登录划分
-
需要登录的shell(login shell): 需要用户名、密码登录后才能进入的shell,例如远程终端工具(secureCRT、xshell、putty)、开机shell登录、ssh登录、通过
su - username
切换到新用户 -
不需要登录的shell(non-login shell):在图形界面中启动一个终端shell、在
login shell
终端输入bash
打开一个新的shell、通过su username
切换到新用户
Su
是switch user
或set user id
的一个缩写
su
只能获得root的执行权限,不能获得环境变量
su -
能切换到root并获得root的环境变量及执行权限
以交互划分
- 交互式shell(interactive shell): shell等待你输入命令并解释和执行这些命令,你按了回车以后它会执行你的命令,然后继续等待下一个命令,例如我们直接打开macOS终端。
- 非交互式shell(non-interactive shell): 一般是指执行shell脚本时的模式,通过
bash test.sh
这种形式执行脚本文件,它并不与用户交互,而是一次性执行脚本 当脚本执行完毕 shell即终止。
通过echo $-
可以查看当前是否为交互式shell,包含i
即为交互式,反之则为非交互式
直接打开mac的终端输入一下命令
liaijie@Silence ~ echo $-
569JNRXZghiklms
可以看到包含i
,即为交互式sehll
编写一个.sh
脚本,并在脚本中输出$-
#!/bin/zsh
echo $-
运行
zliaijie@Silence ~ zsh 01.sh
569X
可以看到不包含i
,即在运行脚本时为非交互式shell
在一般的 linux
或者 unix
(macOS
也是unix
内核)系统中, 都可以通过编辑 bashrc
和 profile
来设置用户的工作环境, 很多文章对于 profile
和 bashrc
也都有使用, 但究竟每个文件都有什么作用和该如何使用呢?
bash的startup文件
我们一般叫环境配置文件
,bash
手册中把这类文件成为startup文件
,可以想象成是一个脚本,每次启动的时候都会初始化一遍,当然这不是bash
才独有的
Linux shell
是用户与Linux
系统进行交互的媒介,而bash
作为目前Linux
系统中最常用的shell,它支持的startup
文件也并不单一,甚至让人感到费解。本文以CentOS 7
系统为例,对bash
的startup
文件进行一些必要的梳理和总结。
(1)先来看看bash手册上的描述
/etc/profile
The systemwide initialization file, executed for login shells。系统初始化文件,在login shells时执行
/etc/bash.bash_logo