【linux脚本】读取命令序列输出&&子shell&&父shell

读取命令序列输出&&shell&&shell

将多个命令或工具结合起来一起输出。一个命令的输出可以当做另一个命令的输入,而这个命令的输出又可以作为另一个的输入。

这几个命令通常用通道(pipe)来链接,“|”。例如:

$cmd1 | cmd2 | cmd3

三个命令组合。cmd1将输出传给cmd2cmd2的输出又传给了cmd3

例子:
$ ls | cat -n > out.txt 

ls的输出传给了cat -n ,cat -n 又将输出通过stdinc重定向写入out.txt中。

我们可以用字shell的方式来读取序列的输出:
cmd_output=$(COMMANDS)

例如:

cmd_output=$(ls | cat -n)

echo $cmd_output

命令会打印ls | cat -n 的结果。

我们还可以将$()换成``(反引用号与~符号在一块)

cmd_output=`ls | cat -n`

echo cme_output

我们在这里要补充一个概念————子shell和父shell 

简单的理解:
我们打开一个终端,其实这就是一个父shell,当我们执行某个脚本xxx.sh时,执行xxx.sh脚本的时候其实系统就为我们打开了一个子shell。一旦子shell执行完成后,返回父shell。子shell的执行并不会对父shell有什么影响。

   

注意:

1.我们可以父shell中开启一个子shell,方法很简单:

pwd;

(cd /bin ;ls)

pwd;

两次pwd返回的结果最终显示是一样的。

2.

我们可以使用子shell或反引用的形式将命令读入变量中,但这里有一个问题我们需要注意。

$cat text.txt

1

2

3 f    f   f

$ out=$(cat text.txt)

$echo $out

1 2 3 f f f#我们注意到系统默认将\n和空格给省略了

$echo “$out”

1

2

3 f    f   f

这样我们就可以保留原格式来输出了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章