美文网首页
Shell 的输入输出重定向

Shell 的输入输出重定向

作者: tafanfly | 来源:发表于2019-07-26 14:17 被阅读0次

输出重定向

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

相关文章

网友评论

      本文标题:Shell 的输入输出重定向

      本文链接:https://www.haomeiwen.com/subject/sbcnkctx.html