Shell 的输入输出重定向

输出重定向

一般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表示标准错误输出重定向(等同于)标准输出,之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大多数UNIX系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读...
    Leon_Geo阅读 2,405评论 0 2
  • 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地...
    Cooci_和谐学习_不急不躁阅读 3,798评论 0 1
  • Shell 输入/输出重定向大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令...
    海角hust阅读 1,605评论 0 0
  • 大多数UNIX系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读...
    Leon_Geo阅读 3,658评论 0 7
  • 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地...
    枫海阅读 3,247评论 0 2