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 命令运行时都会打开三个文件:

综上所述
> 表示重定向到哪里
0 表示标准输入(STDIN)
1 表示标准输出(STDOUT),系统默认值是1
2 表示标准错误输出(STDERR)
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

举例脚本

#!/bin/bash

error
echo "LiLei"
$ sh test.sh 1>output
test.sh: line 3: error: command not found
$ cat output
LiLei
$ 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表示标准错误输出重定向(等同于)标准输出,之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件

上一篇 下一篇

猜你喜欢

热点阅读