Shell 的输入输出重定向
2019-07-26 本文已影响0人
tafanfly
输出重定向
一般shell命令的输出打印在终端上的,不过也可以保存到文件内。
- 使用
>
把输出定向到文件中 - 再次重定向同一个文件,会覆盖上一次
- 可以使用
>>
追加重定向, 不会覆盖原内容
#!/bin/bash
name='LiLei'
echo "Your name is $name" > name.txt
echo "Your name is $name" > name1.txt
echo "My name is $name" > name1.txt
echo "Your name is $name" > name2.txt
echo "My name is $name" >> name2.txt
#sh test.sh
$ cat name.txt
Your name is LiLei
$ cat name1.txt
My name is LiLei
$ cat name2.txt
Your name is LiLei
My name is LiLei
输入重定向
shell 命令可以从文件获取输入, 一般情况是从键盘获取输入的。
重定向深入理解
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
综上所述
:
> 表示重定向到哪里
0 表示标准输入(STDIN)
1 表示标准输出(STDOUT),系统默认值是1
2 表示标准错误输出(STDERR)
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
举例脚本
#!/bin/bash
error
echo "LiLei"
- 标准输出重定向到test
其中>
和1>
的作用是一样的,因为系统默认值是1,都是表示标准输出重定向
$ sh test.sh 1>output
test.sh: line 3: error: command not found
$ cat output
LiLei
- 标准错误输出重定向到error
$ sh test.sh 2>error
LiLei
$ cat error
test.sh: line 3: error: command not found
- 标准输出和错误输出重定向
$ sh test.sh >info 2>&1
$ cat info
test.sh: line 3: error: command not found
LiLei
讲解:
>info
表示标准输出
重定向到info文件
2>&1
表示标准错误输出
重定向(等同于)标准输出
,之前标准输出
已经重定向到了info文件,所以标准错误输出
也重定向到info文件
$ sh test.sh >info 1>&2
test.sh: line 3: error: command not found
LiLei
$ cat info #没有任何东西
讲解:
>info
表示标准输出
重定向到info文件
1>&2
表示标准输出
重定向(等同于)标准错误输出
,所以标准输出
没有信息记录到info文件内, 标准错误输出
像往常一样终端打印出来
$ sh test.sh 2>info 1>&2
$ cat info
test.sh: line 3: error: command not found
LiLei
讲解:
2>info
表示标准错误输出
重定向到info文件
1>&2
表示标准输出
重定向(等同于)标准错误输出
,之前标准错误输出
已经重定向到了info文件,所以标准输出
也重定向到info文件
- 标准输出和错误输出不打印终端且不保存到文件
sh test.sh >/dev/null 2>&1
讲解:
/dev/null
是一个特殊的文件,写入到它的内容都会被丢弃, 也无法从该文件中读取到任何内容
>/dev/nul
表示标准输出
重定向到空设备文件
2>&1
表示标准错误输出
重定向(等同于)标准输出
,之前标准输出
已经重定向到了空设备文件,所以标准错误输出
也重定向到空设备文件