shell学习笔记之八——重定向、文件包含



  • 输入、输出重定向

    • cmd > file 输出重定向到file
    • cmd < file 输入重定向到file
    • cmd >> file 输出追加到file
    • n > file 文件描述符为n的文件重定向到file
    • n >> file 文件描述符为n的文件追加方式地重定向到file
    • n >& m 把输出m和n合并
    • n <& m 把输入m和n合并
    • << tag 把开始标记tag和结束标记tag直接的内容作为输入

    输出重定向

    command > file
    #比如
    who > users
    

    输入重定向

    command < file 
    #从文件读取
    
    #综合以上两个可以
    command < file1 > file2
    

    深入理解重定向

    一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

    • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
    • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
    • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
    • 默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

    如果希望 stderr 重定向到 file,可以这样写:

    command 2 > file

    如果希望将stdout和stderr合并后重定向,可以这样写:

    command > file 2>&1

    Here Document

    这是特殊的一种重定向

    command << tag   #开始的tag前后的空格会被忽略
    	document
    tag           #tag可以是字符串、符号、EOF等 ,但是一定要顶格写,前后不能有任何字符
    

    它会将两个tag之间的内容(document)作为输入传给command

    /dev/null文件

    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

    command > /dev/null
    

    /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是

    /dev/null 文件非常有用,将命令的输出重定向到它,会起到"==禁止输出=="的效果。

    如果希望屏蔽 stdout 和 stderr,可以这样写:

    command > /dev/null 2>&1
    

    文件包含

    相当于引用外部脚本

    . filename
    #或者
    source filename
    

    被包含的文件不需要可执行权限

    demo

    比如在demo中创建两个shell脚本,其中一个脚本中给出变量num,并且在另一个脚本中使用

    #!/bin/bash
    #这是test1.sh
    num=233333
    
    #!/bin/bash
    #这是test2.sh
    . ./test2.sh
    #或者
    #source ./test2.sh
    
    echo "233333,read after me"
    echo $num
    

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

Looks like your connection to Dian was lost, please wait while we try to reconnect.