有关linux标准输出、标准输入、标准错误的重定向问题

时间:2022-02-07 15:57:32

1、简单的命令行重定向问题。

  例:ls  -al  test   test1  test2    1>out.txt  2>err.tx

  这里ls这句命令行命令之后将标准输入重定向到out.txt中,标准错误重定向到err.txt中。

2、文件中临时重定向题

  例:$  cat   test1

    #!/bin/bash

    #!关于测试临时重定向问题

    echo  "This is  an error!" >&2   #将这句话临时重定向为标准错误

    echo  "This  is  normal  output! "

  正常运行这个脚本:./test1

  结果为:This is an error!

      This is normal output!

  这看不出什么区别,那么来看下面这样运行:./test1  1>out.txt  2>err.txt

  结果终端界面上不会出现脚本的运行结果,这里把标准输入重定向到out.txt中,标准错误重定向到err.txt中,而脚本中将“This is an error!"

  这句话临时重    定向为标准错误,而脚本中正常的输出为”This is normal output!“ 。所以分别cat  out.txt和cat err.txt两个文件即可发现脚本中的两句话。

3、永久重定向

  如果脚本中有大量的数据需要重定向,那么按上面的方法,一句一句来会很麻烦,那来看下面的例子

  例:$ cat  test2

    #!/bin/bash

    #!关于批量永久重定向

    exec  2>err.txt  #将本脚本中的标准输出永久重定向到out.txt中

    echo " This  is just a testing!"

    echo "HaHa!"

    exec  1>out.txt  #以下内容中标准输出重定向到out.txt

    echo  "Now the testing is over!"

    echo " This is a testing error!" >&2

  然后运行脚本  ./test2

  结果为:This is just a testing!

      HaHa!

  其余两句我们分别可以在out.txt和err.txt中见到,脚本中将“This is a testing error!"临时重定向为了标准错误,因此脚本将其重定向到了err.txt。

  这就是批量永久重定向。

4、在脚本中重定向输入

  例: $  cat  test3

    #!/bin/bash

    #!测试脚本中输入重定向

    exec 0<input.txt  #将input.txt中的内容作为输入重定向到脚本中

    count=1

    while read line

    do

      echo  "#$count :$line "

      count=$(($count+!))

    done

  这个可以用于批量读入文件等地方,很多都可以用。