当前位置:   article > 正文

测试工作常用Linux shell命令-bash基础之bash运行环境_bash 启动环境再执行

bash 启动环境再执行

1、shell运行环境概念

* bash下还可以再重新启动一个shell,这个shell是sub shell(子shell),原shell会复
  制自身给他。在sub shell中定义的变量,会随着sub shell的消亡而消失 
* () 子shell中运行
* $(ls) 表示执行ls后的结果,与``作用一致,不过可以嵌套
* {} 当前shell中执行
* $$ 当前脚本执行的pid
* & 后台执行 
* $!运行在后台的最后一个作业的PID(进程ID)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

实践展示:

  • 如下操作步骤,查看当前bash的pid->开启另一个bash->查看pid->退出当前bash->再查看pid;我们会发现两个bash的pid不同,说明这是两个不同的运行环境
[16210504@izuf60jasqavbxb9efockpz ~]$ echo $$    #查看当前bash的pid
15493
[16210504@izuf60jasqavbxb9efockpz ~]$ bash   	 #开启另一个bash
[16210504@izuf60jasqavbxb9efockpz ~]$ echo $$    #查看pid
15514
[16210504@izuf60jasqavbxb9efockpz ~]$ exit       #退出当前bash
exit
[16210504@izuf60jasqavbxb9efockpz ~]$ echo $$    #再查看pid
15493
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 子shell与当前shell
[16210504@izuf60jasqavbxb9efockpz ~]$ a="当前shell"
[16210504@izuf60jasqavbxb9efockpz ~]$ (a=1;echo $a;);echo $a    #(表示在sub shell中运行)
1
当前shell
[16210504@izuf60jasqavbxb9efockpz ~]$ { a=1;echo $a; };echo $a  #{表示在当前shell中运行}
1
1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 后台执行并调用
[16210504@izuf60jasqavbxb9efockpz ~]$ sleep 100&
[2] 15851
[16210504@izuf60jasqavbxb9efockpz ~]$ jobs
[1]+  已停止               sleep 50
[2]-  运行中               sleep 100 &
[16210504@izuf60jasqavbxb9efockpz ~]$ fg 2
sleep 100
^Z
[2]+  已停止               sleep 100
[16210504@izuf60jasqavbxb9efockpz ~]$ bg 2
[2]+ sleep 100 &
[16210504@izuf60jasqavbxb9efockpz ~]$ jobs
[1]+  已停止               sleep 50
[2]-  运行中               sleep 100 &
[16210504@izuf60jasqavbxb9efockpz ~]$
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2、shell环境变量

* Shell首先是一个工作环境,有很多变量可以供我们使用。
* set 可以获得当前的所有变量 
* env可以获得可以传递给子进程的变量 
* export aa=bbbb 把私有变量导出
  • 1
  • 2
  • 3
  • 4
[16210504@izuf60jasqavbxb9efockpz ~]$ vi ~/.bash_profile

ANDROID_HOME=/Users/qinzhen/Library/Android/sdk
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export JMETER_HOME=/Users/qinzhen/Documents/TestDev/apache-jmeter-5.1.1
export PATH=$JMETER_HOME/bin:$PATH
export M3_HOME=/Users/qinzhen/Documents/TestDev/maven/apache-maven-3.6.1
export PATH=$M3_HOME/bin:$PATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、shell输入输出

* Read 用来读取输入,并赋值给变量 
* echo ,printf可以简单输出变量。 
* > file 将输出重定向到另一个文件 
* >> 表示追加 等价于tee -a
* < file 输入重定向
* | 表示管道,也就是前一个命令的输出传入下一个命令的输入
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、文件描述符

输入文件—标准输入0 
输出文件—标准输出1 
错误输出文件—标准错误2

使用 2>&1 >/tmp/tmp < /tmp/tmp
  • 1
  • 2
  • 3
  • 4
  • 5

这里分享一篇别人写的文章来解释文件描述符的重定向,说的很详细到位:
Bash 中的 & 符号和文件描述符

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/449744
推荐阅读
相关标签
  

闽ICP备14008679号