依次运行一系列命令
- 命令列表
pwd; ls; cd ..; pwd
将一组命令组合在一起依次运行。
- 进程列表
(pwd; ls; cd ..; pwd)
会生成一个子shell来执行括号中的命令组合。
- 如果不想创建子shell,又想将多个命令分组,使用花括号
{pwd; ls; cd ..; pwd}
.
特殊变量 $BASH_SUBSHELL
- 用于显示是否是子shell
(pwd ; (echo $ZSH_SUBSHELL))
.
- 对于脚本,常用子shell进行多进程处理;但对于交互式CLI,无法进行真正的多进程处理,因为终端控制了子shell的I/O。
在交互式命令行中的子shell用法
1. 使用与符号& (ampersand)让命令进入后台运行
sleep 5 &
返回后台作业号和进程号 [background job id] PID [1] 33711
.
jobs
2. 使用与符号和列表将子shell放到后台运行
(sleep 2; echo $ZSH_SUBSHELL; sleep 2) &
此命令立即返回[1] 33760
,等待2秒,显示➜ ~ 1
,再过2秒, 显示[1] + 33760 done ( sleep 2; echo $ZSH_SUBSHELL; sleep 2; )
.
- 再次过程中可以一直输入其他命令,且子shell的I/O也不会受制于终端输入。
3. coproc 协程
- 在后台生成子shell,并在其中执行命令。
coproc sleep 2
和 sleep 2 &
等效.
shell的内建命令和外部命令
区分
type -a cmd
- 有些命令既有外部也有内建实现。
外部命令
- 其存在于shell程序之外,执行时会创建出(fork)一个子进程
内建命令
- 不需要shell以外的文件执行,不需要子进程来执行。
history
显示最近用过的命令列表,历史记录存放于 .bash_history中,保存数量由 HISTSIZE环境变量控制,history -a
在退出会话前强制写入历史。
alias -p
查看当前所有命令别名;alias li = 'ls -li'
创建新的别称,但仅在其所被定义的shell进程中才有效。
环境变量
1. 显示环境变量
env
或者 printenv
命令查看全局环境变量;set
显示所有环境变量(全局、局部、用户自定义)。
- 显示某个环境变量:
env HOME
或者 echo $HOME
。
2. 自定义环境变量
- 所有系统环境变量名均用大写字母,所有自定义环境变量名均用小写字母
- 创建局部自定义环境变量:
abc=2
, abc=Hello
,但当包含空格时,必须用引号:abc="Hello World"
- 等号两侧不能包含空格
- 创建全局自定义环境变量:
abc="Hello World"
, export abc
.
- 删除环境变量
unset abc
.
3. PATH 环境变量
- PATH 变量定义了用于进行命令和程序查找的目录,所有在shell中输入的外部命令必须能在PATH中找到才能执行。
- PATH 中的各个目录用冒号
:
分隔,在添加搜索路径时,需要先引用现有的PATH的值,再在其后添加新的目录:PATH=$PATH:/abc/efg
.
4. 环境变量与shell
- 交互式shell:只会检查
~/.bashrc
文件,此文件会检查 /etc/bashrc
文件,并提供用户自定义变量的空间。
- 非交互式shell (脚本):
echo $BASH_ENV
,shell脚本启动时,会检查此变量;如果未设置此变量,则继承父shell导出的变量。
5. 数组变量
array=(one two three)
.
echo ${array[1]}
, echo ${array[*]}
posted @
2022-04-10 21:08
略略略——
阅读(
53)
评论()
编辑
收藏
举报