zoukankan      html  css  js  c++  java
  • bash 重定向

     使用Bash可以方便的用<和>实现输出输入的重定向,本文讨论重定向的一些细节和技巧。本文介绍部分是对Bash Quick Reference相关内容的翻译。

    基础知识

    文件描述符(File Descriptor),用一个数字(通常为0-9)来表示一个文件。常用的文件描述符如下:

    文件描述符 名称 常用缩写 默认值
    0 标准输入 stdin 键盘
    1 标准输出 stdout 屏幕
    2 标准错误输出 stderr 屏幕

    我们在简单地用<或>时,相当于使用 0< 或 1>(下面会详细介绍)。

    管道“|”(pipe line),把上一个命令的 stdout 接到下一个命令的 stdin;

    tee 命令的作用是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;

    简单重定向

    • cmd > file
    把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止覆盖原有文件。
    • cmd >> file
    把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面。
    • cmd < file
    使cmd命令从file读入
    • cmd << text
    从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用 <<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考后面的例子。
    • cmd <<< word
    把word(而不是文件word)和后面的换行作为输入提供给cmd。
    • cmd n<> file
    以读写方式打开file,并且定义文件描述符fd为n
    • cmd >| file
    功能同>,但即便在设置了noclobber时也会覆盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。

    使用文件描述符的重定向

    使用文件描述符的重定向都使用了&符号。

    cmd >&n 把输出送到文件描述符n
    cmd m>&n 把输出 到文件符m的信息重定向到文件描述符n
    cmd >&- 关闭标准输出
    cmd <&n 输入来自文件描述符n
    cmd m<&n m来自文件描述各个n
    cmd <&- 关闭标准输入
    cmd <&n- 移动输入文件描述符n而非复制它。(需要解释)
    cmd >&n- 移动输出文件描述符 n而非复制它。(需要解释)
     
    注意: 
    >&实际上复制了文件描述符,这使得ls > dirlist 2>&1ls 2>&1 > dirlist的效果不一样。man bash的Redirection节中提及了这段内容。

    重定向的组合应用

    cmd 2>file 把文件描述符2重定向到file,即把错误输出存到file中。
    cmd > file 2>&1 把标准错误重定向到标准输出,再重定向到file,即stderr和stdout都被输出到file中
    cmd &> file 功能与上一个相同,更为简便的写法。
    cmd >& file 功能仍与上一个相同。
    cmd > f1 2>f2 把stdout重定向到f1,而把stderr重定向到f2
    tee files 把stdout原样输出的同时,复制一份到files中。
    tee files 把stderr和stdout都输出到files中,同时输出到屏幕。
  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/int32bit/p/3187846.html
Copyright © 2011-2022 走看看