对shell中的输入和输出进行重新定向
1. 标准输入和输出
所谓标准输入和输出就是指shell中默认的输入和输出方向
名称 | 标准输入 | 标准输出 | 标准错误输出 |
---|---|---|---|
方向 | 从键盘鼠标输入 | 输出到屏幕 | 输出到屏幕 |
文件描述符 | 0 | 1 | 2 |
以下是标准错误输出的一个示例
(base) [zhiyong@malab Learn]$ ll uu #uu这个文件是不存在于当前目录下的
ls: cannot access uu: No such file or directory #系统的报错信息
除了用户想要输出的内容以外的所有输出,包括各种报错和提示,都属于错误输出
2. 重定向输出
- 语法
cat file_name [文件描述符]> 目的文件名
cat file_name [文件描述符]>> 目的文件名
- 当目的文件名代表的文件存在时,新内容会被写入此文件;当目的文件名代表的文件不存在时,此文件会被创建并被写入新内容
- 文件描述符:1代表输出,2代表错误输出,不写则默认为1
- >表示覆盖原有内容;>>表示追加输入,即将新内容添加到原有内容的后面
- 文件描述符和重定向符号之间不能有空格
- 同时将标准输出和标准错误输出重定向
cat uu > aa 2>> bb
- 查看一个文件,把标准输出重定向到aa这个文件中,把标准错误输出重定向到bb这个文件中
- 标准输出与标准错误输出之间的重定向
cat uu 1>&2
将标准输出重定向给标准错误输出
cat uu 2>&1
将标准错误输出重定向给标准输出
3. 特殊文件
- Linux中的
/dev/null
是一个特殊的文件,类似一个黑洞,无论向这个文件中写入多少内容,最后都会消失- 如果想让输出的内容从这台计算机上消失,则把这些输出的内容重定向到
/dev/null
这个文件中
4. 重定向输入
- 标准输入是指从键盘和鼠标进行输入,这是一种交互式输入,如果在脚本中需要非交互式的方式进行输入,则需要进行输入的重定向
4.1 输入重定向为文件
(base) [zhiyong@malab Learn]$ cat pp #构建一个文件
abcde
12345
qwert
45678
(base) [zhiyong@malab Learn]$ cat < pp #最简单的输入重定向,把pp重定向输入给cat命令
abcde
12345
qwert
45678
(base) [zhiyong@malab Learn]$ cat > bb <pp #将pp重定向输入给cat命令,cat命令的输出重定向给bb
(base) [zhiyong@malab Learn]$ ll
total 12
-rw-rw-r--. 1 zhiyong zhiyong 24 12月 6 11:55 bb #目录中新增加bb这个文件
-rwxr--r--. 1 zhiyong zhiyong 196 12月 6 09:24 kk.sh
-rw-rw-r--. 1 zhiyong zhiyong 24 12月 6 11:54 pp
(base) [zhiyong@malab Learn]$ cat bb #对bb的内容进行查看,发现其内容和pp相同,运算正确
abcde
12345
qwert
45678
4.2 输入重定向为非文件
(base) [zhiyong@malab Learn]$ cat pp.sh
#! /bin/bash
cat > bb <<EOF #用<<进行份非文件的输入重定向,以一个大写字符串开始,最后以相同的大写字符字符串结束,这两个大写字母字符串不会被当成是输入的一部分
asd
asdd
ggh
EOF #大写字符字符串可任选,推荐EOF
(base) [zhiyong@malab Learn]$ ll
total 16
-rw-rw-r--. 1 zhiyong zhiyong 13 12月 6 12:10 bb
-rwxr--r--. 1 zhiyong zhiyong 196 12月 6 09:24 kk.sh
-rw-rw-r--. 1 zhiyong zhiyong 24 12月 6 11:54 pp
-rw-rw-r--. 1 zhiyong zhiyong 46 12月 6 12:09 pp.sh
(base) [zhiyong@malab Learn]$ cat bb
asd
asdd
ggh
- 在输入重定向时,重定向操作之前不能有管道操作
- 当重定向操作之间有两个或以上的操作是,重定向操作均是针对第一个命令进行的
- 如果需要进行管道操作,管道操作可以放在重定向操作之后
网友评论