I/O重定向
用于捕捉一个文件、命令、程序或脚本,甚至代码块的输出,
然后把捕捉到的输出作为输入发送给另一个文件、命令、程序或脚本。
管道
管道简介
管道技术是Linux一种基本的进程间通信技术
,利用先进先出
来指挥进程间通信。
管道可应用于应用程序之间、Linux命令之间,以及应用程序和Linux命令之间的通信。
1 | command1 | command2 | command3 | ... | commandn |
cat和more命令
cat和more命令用来显示文件的内容。
1 | # 具体 option 查看帮助文档 |
1 | # 将ls的结果分页展示 |
sed命令与管道
1 | sed [选项] 'sed命令' 输入文件 # 原始的sed命令 |
1 | # 打印ls -l结果的第1~5行 |
1 | # 结合命令替换、管道、sed、变量赋值、echo等知识 |
I/O重定向
I/O重定向:捕捉一个文件、命令、程序或脚本,甚至代码块的输出,
然后把捕捉到的输出作为输入发送给另一个文件、命令、程序或脚本。
- 文件标识符(FD)
用文件标识符来标识一个进程正在访问的特定文件,当打开一个文件或者创建一个文件时,
Linux将返回一个文件标识符供其他操作引用。当启动一个进程时,将自动为该进程打开三个文件:标准输入、标准输出和标准错误输出,分别用0,1,2标识。
- tee命令
T型数据流,讲一个输出分为两个支流,一个到标准输出,一个到某个输出文件。
1 | # 将who的结果保存到output文件 |
- I/O重定向符号
1 | cat > newfile # 将键盘的输入重定向到newfile |
1 | n> filename # 将文件标识符为n的内容输出到filename中 |
1 | < filename # 将文件的内容读入(重定向)标准输入中 |
- exec命令的用法
可以通过
文件标识符
打开或关闭文件,
也可以将文件
重定向到标准输入
或将标准输出
重定向到文件
1 | exec 8<&0 # 将FD 0(标准输入)复制到FD 8 |
1 | exec 8>&1 # 将FD 1(标准输出)复制到FD 8 |
- tty
待研究
1 | sudo echo "asd" > /dev/tty1 # 重定向到tty1,在tty1会接收到asd |
- 代码块重定向
指在
代码块
内将标准输入
或标准输出
重定向到文件
,而在代码块
之外保留默认状态。
可以重定向的代码块是while,until,for等循环结构,也可以是if/then测试结构,甚至可以是函数。
循环
1 | # `标准输入`重定向到`文件` |
1 | ls /etc > log # 将结果重定向到log中 |
if/then
1 | if [condition] |
1 | if [ -z "$1" ] |
命令行处理
具体参考:
shell对每一个命令都要经过
命令行处理流程
进行处理。如,变量替换、通配符展开等。
eval命令
eval命令将其参数作为命令行,让shell重新执行该命令。
由于
命令行处
理需要步骤
,所以当在后面替换
的时候出现了前面已经处理过
的情况,
当执行命令
时会发生错误,所以用eval
表明处理后的命令还需要重新处理一遍
再执行。如果命令中包含
变量替换
,且变量中包含任何需要shell在命令中直接看到的字符
,
就需要使用eval命令,如命令结束符(;,|,&)、I/O重定向符(<,>)和引号等。
1 | pipe="|" |