重定向

北慕城南 提交于 2020-04-30 14:46:39
  1. 通用格式

    • [n]表示fd[n]
    • {varname} > word表示 fd[varname],存储的文件对象是word
    • fd[0]存储的文件对象是stdin;fd[1]存储的文件对象是stdout;fd[2]存储的文件对象是stderr;
    • [n]>&[m]表示的fd[n]=fd[m].所以对于2>&1等价于fd[2]=fd[1]

      如上所示的对应:修改后fd[2]==stdout;fd[1]==stdout,即输出错误输出到标准输出。

    • 2&>word表示>word 2>&1等价于fd[1]=word;fd[2]=fd[1]

      fd[2]==word,fd[1]==word,所以标准输出,标准错误都输出到文件word中。

    • [n]&>-这种表示关闭fd[n]所对应的文件对象文件描述符
    • [n]&>digit-表示digit顶替n然后关掉n
    • <>同时输入输出sprintf,最后文件啥样不可而知。
  2. 解析顺序

    • 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。
      • >1 ls也是可以的
      • ls >1 -l也是可以的
    • 重定向的处理从左到右。
  3. 处理文件描述符

    • 使用tcp进行通讯

  4. 每次重定向之后0,1,2都会复原。

  5. 默认值

    • [n]<n默认为0
    • [n]>n默认为1
    • [n]<<n默认为0
    • [n]>>n默认为1
    • [n]<&n默认为0
    • [n]>&n默认为1
    • [n]>&digit-n默认为0
    • [n]<&digit-n默认为1
  6. 细节上的问题

    • 重定向后的word进行了扩张之后,结果必须是一个单词,多个则会出错。
    • [n]>[|]word这种重定向,支持一种友好的方式,如果>|使用这个,且环境变量设置了set noclobber,且使用的是|,那么将会判断是否存在,如果存在则报错。这样就可以避免重要文件丢失。
    • 自带的while( input() != key ).
      [n]<<[−]word
      here-document
      delimiter
      

      输入多行,输入的单词支持扩张,和普通shell类似,直到结束的word出现。必须是单独的一行,一字不差的全部匹配。-表示去掉前置的空格。

    • <<<允许字符串直接重定向,这种也可以扩张。
  7. 特殊的文件

    这些文件都是不存在的,是虚拟的。如果存在,则当成普通文件处理。所以谨慎使用。

    • /dev/fd/fd 文件描述符
    • /dev/stdin 标准输入
    • /dev/stdout 标准输出
    • /dev/stderr 标准错误
    • /dev/tcp/host/porthost可以使网址可以是IP,端口也需要合法,然后开启TCP连接并赋值。
    • /dev/udp/host/port 同上
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!