您的位置:首页 > 运维架构 > Linux

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

2013-07-03 21:59 267 查看
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

  这个可以用于批量读入文件等地方,很多都可以用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: