菜单

【4166m金沙】Linux下输入输出重定向,标准IO和重定向

2019年8月31日 - 4166m金沙
【4166m金沙】Linux下输入输出重定向,标准IO和重定向

标准IO和重定向

  >&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;

2、重定向操作符

<                    重定向输入

<&                重定向输入,后接数字格式的文件描述符

>                    重定向输出

>>                  追加输出

2>                  重定向错误

&>                  重定向错误和输出,后接文件名

>&                 重定向错误和输出,后接文件名或数字格式的文件描述符

2>&1            重定向标准错误到标准输出 

1>&2            重定向标准输出到标准错误

>|                 
 重定向输出时覆盖noclobber,即如果文件存在直接覆盖文件

<>filename  如果是一个设备文件,就把这个文件作为标准输入和标准输出

  b、
常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;

3、例子

1) 将标准错误重定向到文件
$cc prog.c 2>errfile

2) 将标准输出重定向到文件,标准错误重定向到空设备文件
$cc prog.c >logfile 2>/dev/null

3) 将标准输出和标准错误都定向到文件或文件描述符
$cc prog.c &> logfile //必须是文件名
$cc prog.c >& logfile //可以是文件名或数字格式的文件描述符
$cc prog.c >& 1
//将标准输出和标准错误重定向到标准输出,标准输出的文件描述符为1

4) 将标准输出重定向到文件,将标准错误重定向到标准输出定向的设备
$cc prog.c >logfile 2>&1
等效于
$cc prog.c >& logfile 

本文永久更新链接地址:

1、标准输入/输出/错误
当shell启动,它继承三个文件:stdin、stdout、stderr,标准输入通常来自键盘,标准输出和标准错误通…

  cmd < file cmd 命令以 file 文件作为 stdin;

1、标准输入/输出/错误

当shell启动,它继承三个文件:stdin、stdout、stderr,标准输入通常来自键盘,标准输出和标准错误通常是屏幕。
标准输入/输出/错误的文件描述符为0、1、2

  cmd > file 把 stdout 重定向到 file 文件中;

  1    COMMAND_OUTPUT >
  2      # 重定向stdout到一个文件.
  3      # 如果没有这个文件就创建, 否则就覆盖.
  4
  5      ls -lR > dir-tree.list
  6      # 创建一个包含目录树列表的文件.
  7
  8    : > filename
  9      # > 会把文件”filename”截断为0长度.
  10      # 如果文件不存在,
那么就创建一个0长度的文件(与’touch’的效果相同).
  11      # : 是一个占位符, 不产生任何输出.
  12
  13    > filename   
  14      # > 会把文件”filename”截断为0长度.
  15      # 如果文件不存在,
那么就创建一个0长度的文件(与’touch’的效果相同).
  16      # (与上边的”: >”效果相同,
但是在某些shell下可能不能工作.)
  17
  18    COMMAND_OUTPUT >>
  19      # 重定向stdout到一个文件.
  20      # 如果文件不存在, 那么就创建它, 如果存在,
那么就追加到文件后边.
  21
  22
  23      # 单行重定向命令(只会影响它们所在的行):

  STDERR 2 输出错误信息到提示符窗口

  24      #

4166m金沙,  25
  26    1>filename
  27      # 重定向stdout到文件”filename”.
  28    1>>filename
  29      # 重定向并追加stdout到文件”filename”.
  30    2>filename
  31      # 重定向stderr到文件”filename”.
  32    2>>filename
  33      # 重定向并追加stderr到文件”filename”.
  34    &>filename
  35      # 将stdout和stderr都重定向到文件”filename”.
  36
  37     
#==============================================================================
  38      # 重定向stdout, 一次一行.
  39      LOGFILE=script.log
  40
  41      echo “This statement is sent to the log file, \”$LOGFILE\”.”
1>$LOGFILE
  42      echo “This statement is appended to \”$LOGFILE\”.”
1>>$LOGFILE
  43      echo “This statement is also appended to \”$LOGFILE\”.”
1>>$LOGFILE
  44      echo “This statement is echoed to stdout, and will not appear
in \”$LOGFILE\”.”
  45      # 每行过后, 这些重定向命令会自动”reset”.
  46
  47
  48
  49      # 重定向stderr, 一次一行.
  50      ERRORFILE=script.errors
  51
  52      bad_command1 2>$ERRORFILE      # 
错误消息发到$ERRORFILE中.
  53      bad_command2 2>>$ERRORFILE      # 
错误消息添加到$ERRORFILE中.
  54      bad_command3                    #  错误消息echo到stderr,
  55                                      #+
并且不出现在$ERRORFILE中.
  56      # 每行过后, 这些重定向命令也会自动”reset”.
  57     
#==============================================================================
  58
  59
  60
  61    2>&1
  62      # 重定向stderr到stdout.
  63      # 得到的错误消息与stdout一样, 发送到一个地方.
  64
  65    i>&j
  66      # 重定向文件描述符i 到 j.
  67      # 指向i文件的所有输出都发送到j中去.
  68
  69    >&j
  70      # 默认的, 重定向文件描述符1(stdout)到 j.
  71      # 所有传递到stdout的输出都送到j中去.
  72
  73    0< FILENAME
  74    < FILENAME
  75      # 从文件中接受输入.
  76      # 与”>”是成对命令, 并且通常都是结合使用.
  77      #
  78      # grep search-word <filename
  79
  80
  81    [j]<>filename
  82      # 为了读写”filename”, 把文件”filename”打开,
并且分配文件描述符”j”给它.
  83      # 如果文件”filename”不存在, 那么就创建它.
  84      # 如果文件描述符”j”没指定, 那默认是fd 0, stdin.
  85      #
  86      # 这种应用通常是为了写到一个文件中指定的地方.
  87      echo 1234567890 > File    # 写字符串到”File”.
  88      exec 3<> File            # 打开”File”并且给它分配fd

  1.   89      read -n 4 <&3            # 只读4个字符.
      90      echo -n . >&3            # 写一个小数点.
      91      exec 3>&-                # 关闭fd 3.
      92      cat File                  # ==> 1234.67890
      93      # 随机存储.
      94
      95
      96
      97    |
      98      # 管道.
      99      # 通用目的的处理和命令链工具.
     100      # 与”>”很相似, 但是实际上更通用.
     101      # 对于想将命令, 脚本, 文件和程序串连起来的时候很有用.
     102      cat *.txt | sort | uniq > result-file
     103      # 对所有的.txt文件的输出进行排序, 并且删除重复行,
     104      # 最后将结果保存到”result-file”中.

 

4166m金沙 1

  2 >& 1
意思是将错误输出重定向到句柄1标准输出;综合起来就是mysh命令执行过程中产生的标准输出和错误输出都会被重定向到mylog.txt中;

  下表列出了可用于重定向输入和输出数据流的操作符:

  cmd >> file 把 stdout 重定向到 file 文件中(追加);

  STDIN 0 键盘输入

  exec 5>&- # 关闭 FD5。

  n<&- 表示将 n 号输入关闭;

  上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的
0 或 1。如:

  cmd 2> file 把 stderr 重定向到 file 文件中;

例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即
STDOUT):2>&1

  默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是
1。键入 < 或 >
操作符之后,必须指定数据的读写位置,可以是文件名或其他现有的句柄。

  … 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。

  n>&- 表示将 n 号输出关闭;

  cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2
文件作为 stdout;

  cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;

  cmd 1> fiel 把 stdout 重定向到 file 文件中;

  exec 2>errfilename # 打开文件 errfilename作为 stderr。

  > 将命令输出写入文件或设备,而不是命令提示符或句柄

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

  某些时候我们可能并不希望记录什么标准输出或者是错误输出,那可以用mysh
>null 2>null或者mysh >/dev/null 2>/dev/null;

  exec 0<&- # 关闭 FD0。

  cmd << delimiter Here document,从 stdin 中读入,直至遇到
delimiter 分界符。

  | 从一个命令中读取输出并将其写入另一个命令的输入中;也称为管道操作符

  1、 基本概念(这是理解后面的知识的前提,请务必理解)

  e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与
1> 是一样的;

  < 从文件而不是从键盘或句柄读入命令输入

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图