bash的输出重定向->>和>&,重定向和复制之间有什么区别?

基督教

我试图了解输出重定向,但是我很挣扎。我认为我没有真正的区别。

1 > file        # -  redirect stdout to file (override mode)
1 >> file       # -  redirect stdout to file (append mode)
2 > 1           # 1) would that also redirect stderr to stdout, replacing stdout?
2 >> 1          # 2) would this redirect stderr to stdout (appending to it,
                #    i.e. haivng both sent to stdout?)
1>&9            # -  duplicates stdout to file descriptor (pointer) 9 
                # 3) what's the difference of 2>&1 to a 2 >> 1? Does >> only run at the end
                #     of output?
echo foo > file # -  redirects output to file (override mode)
>file 2>&1      # -  duplicates stderr to stdout, then redirects to file in override mode 
                # 4) why is this giving me stdout, too, when the syntax is 2>&1, 
                #    i.e. duplicate stderr into stdout - not merge 2 into 1?

我假设“&”号&表示重复,而不是重定向。但是,什么是重定向的差异ab(将a保持不变?)来复制ab(会ab一样吗?)?2>&1有效地似乎重定向并合并21,即本来应该进入的2内容1,但仅在1...为什么?

我很混乱...

斯蒂芬·基特

首先,文件名之后 >之后的>>是文件名;因此> 1写入名为的文件1

示例中给出的其他格式的数字是文件描述符。默认情况下,程序以连接的文件描述符0(标准输入),1(标准输出)和2(标准错误)开头;当您从交互式外壳启动程序时,它们将连接到终端的输入和输出(您可以通过ls -l /proc/$$/fd在Linux上运行来查看它们)。

在之前指定一个数字>>>>&指定您要操作的文件描述符;该数字必须在>符号前面因此

echo Example 2> stderr

将打印“示例”并创建一个空stderr文件(其中将包含发送到标准错误的所有内容)。

您可以将文件描述符视为表中指向文件的条目。因此默认情况下:

  • 0点至 /dev/tty
  • 1分 /dev/tty
  • 2点 /dev/tty

指定1> file(或简单地> file)将文件描述符1更新为指向file,以截断模式打开(因此其内容将被替换)。指定2> 1更新文件描述符2以指向1在截断模式下打开的名为的文件

使用>&(或&>,这是首选形式)复制文件描述符只是将一个文件描述符更新为指向另一个文件描述符所指向的内容。在您的最后一个示例中,> file更新文件描述符1:

  • 0点至 /dev/tty
  • 1分 file
  • 2点 /dev/tty

然后2>&1更新文件描述符2:

  • 0点至 /dev/tty
  • 1分 file
  • 2点 file

(顺序很重要:> file 2>&1产生以上内容,2>&1 > file只会最终重定向文件描述符1)。

1>&9格式仅在文件描述符9已打开的情况下有效,例如,通过将文件描述符1复制到文件描述符1(9>&1)或通过打开文件(9> file)。这种类型的构造对于重定向时跟踪文件描述符的原始内容很有用。因此,在脚本中,您可以安全地复制1和2,将标准输出和错误重定向到您需要的任何目的,然后将其还原...

猛砸手册有所有的细节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

代理和重定向之间有什么区别

来自分类Dev

django:临时重定向和永久重定向之间有什么区别?

来自分类Dev

Thymeleaf中的“查看”和“重定向”有什么区别?

来自分类Dev

“重定向”和“管道”有什么区别?

来自分类Dev

在Phalcon中重定向和分派有什么区别?

来自分类Dev

“重定向”和“管道”有什么区别?

来自分类Dev

Bash输入和输出重定向

来自分类Dev

bash:“<”和“<<<”重定向的区别

来自分类Dev

Spring MVC Controller:“返回前进”,“返回重定向”和“返回jsp文件”之间有什么区别

来自分类Dev

输入和输出重定向

来自分类Dev

输出重定向和空格

来自分类Dev

Django:重定向到视图函数和重定向到 url(来自 urls.py 文件)有什么区别

来自分类Dev

Bash:将命令输出重定向到STDOUT和变量

来自分类Dev

在 bash 脚本中重定向标准输入和标准输出

来自分类Dev

重定向和modelandview内部重定向之间的区别

来自分类Dev

“>&1”和“> / proc / self / fd / 1”重定向有什么区别?

来自分类Dev

在PowerShell中`>`(重定向)和Out-File有什么区别

来自分类Dev

“>&1”和“> / proc / self / fd / 1”重定向有什么区别?

来自分类Dev

NodeJs 中的重定向和下一步有什么区别?

来自分类Dev

通过键盘输入和重定向来提供输入有什么区别?

来自分类Dev

重定向标准输入和标准输出

来自分类Dev

PowerShell标准输出和重定向

来自分类Dev

结合括号扩展和输出重定向

来自分类Dev

Linux管道和重定向输出

来自分类Dev

重定向shell中的输入和输出

来自分类Dev

符号链接的目录和输出重定向

来自分类Dev

重定向标准输入和标准输出?

来自分类Dev

重定向2>&1 1> file.txt和> a.txt 2>&1有什么区别?

来自分类Dev

Bash读取命令和stdin重定向

Related 相关文章

  1. 1

    代理和重定向之间有什么区别

  2. 2

    django:临时重定向和永久重定向之间有什么区别?

  3. 3

    Thymeleaf中的“查看”和“重定向”有什么区别?

  4. 4

    “重定向”和“管道”有什么区别?

  5. 5

    在Phalcon中重定向和分派有什么区别?

  6. 6

    “重定向”和“管道”有什么区别?

  7. 7

    Bash输入和输出重定向

  8. 8

    bash:“<”和“<<<”重定向的区别

  9. 9

    Spring MVC Controller:“返回前进”,“返回重定向”和“返回jsp文件”之间有什么区别

  10. 10

    输入和输出重定向

  11. 11

    输出重定向和空格

  12. 12

    Django:重定向到视图函数和重定向到 url(来自 urls.py 文件)有什么区别

  13. 13

    Bash:将命令输出重定向到STDOUT和变量

  14. 14

    在 bash 脚本中重定向标准输入和标准输出

  15. 15

    重定向和modelandview内部重定向之间的区别

  16. 16

    “>&1”和“> / proc / self / fd / 1”重定向有什么区别?

  17. 17

    在PowerShell中`>`(重定向)和Out-File有什么区别

  18. 18

    “>&1”和“> / proc / self / fd / 1”重定向有什么区别?

  19. 19

    NodeJs 中的重定向和下一步有什么区别?

  20. 20

    通过键盘输入和重定向来提供输入有什么区别?

  21. 21

    重定向标准输入和标准输出

  22. 22

    PowerShell标准输出和重定向

  23. 23

    结合括号扩展和输出重定向

  24. 24

    Linux管道和重定向输出

  25. 25

    重定向shell中的输入和输出

  26. 26

    符号链接的目录和输出重定向

  27. 27

    重定向标准输入和标准输出?

  28. 28

    重定向2>&1 1> file.txt和> a.txt 2>&1有什么区别?

  29. 29

    Bash读取命令和stdin重定向

热门标签

归档