• linux bash关闭标准输出1(exec 1<&-)后重新打开


    linux bash shell的再次学习。

    文件描述符:

    stdin,stdout 和 stderr 的文件描述符分别是 0,1 和 2(一个文件描述符说白了就是文件系统为了跟踪这个打开的文件而分配给它的一个数字)

    1 .避免管道产生的子shell

     #!/bin/bash
     
     E_WRONG_ARGS=71
     if [ -z "$1" ]
     then
         echo "Usage: $0 input-file"
         exit $E_WRONG_ARGS
     fi
     
     Lines=0
     
     cat "$1" | while read line; # 管道会产生子 shell
     do {
         echo $line
         (( Lines++ )); #  增加这个变量的值
         # 但是外部循环却不能访问
     }
     done
     
     echo "Number of lines read = $Lines" # 0
     # 错误!
     echo "------------------------"
     exec 3<> "$1"
     while read line <&3
     do {
         echo "$line"
         (( Lines++ )); #  增加这个变量的值
         # 现在外部循环就可以访问了
         #  没有子shell, 现在就没问题了
     }
     done
     exec 3>&-
     echo "Number of lines read = $Lines"
     exit 0
                                                                                 
    

      

    2.绑定屏幕的便准输出到 out这个文件,即将所有的标准输出都输出到out这个文件当中。

    --------------------------------------------------

    参考:https://www.cnblogs.com/sparkdev/p/10247187.html

    这样子来读入文件fly的内容

     清空文件

    ----------------------------------------------------------------------------

    Reopen STDOUT and STDERR after closing them?

    I am running this on an Ubuntu machine, so I am not sure if it'll work for you, but this is what I did:

    $ exec 1>&0
    $ exec 2>&0

    Suddenly, I had STDOUT and STDERR reconnected. Magic!

    Explanation: Running the following commands, we get the following output:

    $ ls -l /dev/stdout
    lrwxrwxrwx 1 root root 15 Jun 11 23:39 /dev/stdout -> /proc/self/fd/1
    
    $ ls -l /proc/self/fd/1
    lrwx------ 1 jay jay 64 Jun 22 01:34 /proc/self/fd/1 -> /dev/pts/10
    
    $ ls -l /proc/self/fd/
    total 0
    lrwx------ 1 jay jay 64 Jun 22 01:35 0 -> /dev/pts/10
    lrwx------ 1 jay jay 64 Jun 22 01:35 1 -> /dev/pts/10
    lrwx------ 1 jay jay 64 Jun 22 01:35 2 -> /dev/pts/10
    lr-x------ 1 jay jay 64 Jun 22 01:35 3 -> /proc/12224/fd

    Since all three fd's point to the same thing, we can return them back to normal just by pointing to /dev/pts/10 which the exec 1>&0 and exec 2>&0 do

  • 相关阅读:
    并发技术
    体系结构基础
    TCP协议总结
    HTTP协议总结
    SQL Cookbook:使用字符串
    模运算的基本性质
    682. Baseball Game
    编程之法:面试和算法心得(字符串的全排列)
    编程之法:面试和算法心得(最长回文子串)
    编程之法:面试和算法心得(回文判断)
  • 原文地址:https://www.cnblogs.com/oxspirt/p/10249562.html
Copyright © 2020-2023  润新知