管道STDERR与STDOUT

纳夫图里·凯(Naftuli Kay)

根据“ Linux:完全参考第6版”(第44页),您只能使用|&重定向符号通过管道传输STDERR

我已经编写了一个非常简单的脚本来对此进行测试:

#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2

我这样运行此脚本:

./script.sh |& sed 's:^:\t:'

大概只有打印到STDERR的行会缩进。但是,正如我所看到的,它实际上并不能这样工作:

    Normal Text.
    Error Text. 

我在这里做错了什么?

吉勒斯“别再邪恶了”

我不知道您的书使用什么文本,但是bash手册很清楚(如果您已经对重定向有所了解):

如果|&使用,则命令1的标准错误,除了其标准输出外,还通过管道连接到命令2的标准输入。它是的简写2>&1 |将标准错误隐式重定向到标准输出是在命令指定的任何重定向之后执行的。

因此,如果您不想混合标准输出和标准错误,则必须将标准输出重定向到其他位置。请参阅如何grep标准错误流(stderr)?

{ ./script.sh 2>&1 >&3 | sed 's:^:\t:'; } 3>&1

双方的fd 1和3script.sh以及sed但是将指向原来的标准输出目的地。如果您想成为一个好公民,则可以关闭那些命令不需要的fd 3:

{ ./script.sh 2>&1 >&3 3>&- | sed 's:^:\t:' 3>&-; } 3>&1

bashksh93可以将压缩>&3 3>&->&3-(fd move)。

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

배관 STDERR 대 STDOUT

분류에서Dev

배관 STDERR 대 STDOUT

분류에서Dev

stdout을 stderr로 바꾸기

분류에서Dev

How to send stderr to stdout with a pipe to another command?

분류에서Dev

Capture stdout and stderr as separate variables in fish shell

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

如何在cmd.exe中管道stderr?

분류에서Dev

How to redirect stderr and stdout to different files and also display in terminal?

분류에서Dev

Logging in C printing to both stdout and stderr without duplicates

분류에서Dev

lftp, stdout, stderr 및 SAP exec_protocol

분류에서Dev

echo 또는 print / dev / stdin / dev / stdout / dev / stderr

분류에서Dev

systemd 서비스의 stdout / stderr보기

분류에서Dev

QTextEdit 위젯에서 stdout, stderr 복제

분류에서Dev

PowerShell 결합 및 로그 Stderr / Stdout

분류에서Dev

stdout을 tcsh의 stderr로 리디렉션

분류에서Dev

Perl: Getting STDERR of system call, separately from STDOUT

분류에서Dev

STDIN, STDOUT, STDERR 및 반환 값 정보

분류에서Dev

Disowned command with redirected STDOUT/STDERR still sending output to shell

분류에서Dev

Redirect stdout and stderr when ampersand(&) is used between commands in bash

분류에서Dev

How can I convert to uppercase stderr output but not stdout?

분류에서Dev

What is a good way to get back to the command prompt discarding STDOUT and STDERR

분류에서Dev

How can I view stdout/stderr of a startup application?

분류에서Dev

GNU 병렬 정렬 stdout 및 stderr

분류에서Dev

파일에 stderr 및 stdout 추가

분류에서Dev

Bash 스크립트 stderr 및 stdout

분류에서Dev

bash stdout + stderr를 한 파일로, stderr를 다른 파일로 리디렉션

분류에서Dev

nc에 대한 STDOUT 및 STDERR 리디렉션

분류에서Dev

변수를 사용한 Stdout 및 Stderr 리디렉션

분류에서Dev

BASH 타임 스탬프를 stdout 및 stderr 앞에 추가

Related 관련 기사

  1. 1

    배관 STDERR 대 STDOUT

  2. 2

    배관 STDERR 대 STDOUT

  3. 3

    stdout을 stderr로 바꾸기

  4. 4

    How to send stderr to stdout with a pipe to another command?

  5. 5

    Capture stdout and stderr as separate variables in fish shell

  6. 6

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  7. 7

    如何在cmd.exe中管道stderr?

  8. 8

    How to redirect stderr and stdout to different files and also display in terminal?

  9. 9

    Logging in C printing to both stdout and stderr without duplicates

  10. 10

    lftp, stdout, stderr 및 SAP exec_protocol

  11. 11

    echo 또는 print / dev / stdin / dev / stdout / dev / stderr

  12. 12

    systemd 서비스의 stdout / stderr보기

  13. 13

    QTextEdit 위젯에서 stdout, stderr 복제

  14. 14

    PowerShell 결합 및 로그 Stderr / Stdout

  15. 15

    stdout을 tcsh의 stderr로 리디렉션

  16. 16

    Perl: Getting STDERR of system call, separately from STDOUT

  17. 17

    STDIN, STDOUT, STDERR 및 반환 값 정보

  18. 18

    Disowned command with redirected STDOUT/STDERR still sending output to shell

  19. 19

    Redirect stdout and stderr when ampersand(&) is used between commands in bash

  20. 20

    How can I convert to uppercase stderr output but not stdout?

  21. 21

    What is a good way to get back to the command prompt discarding STDOUT and STDERR

  22. 22

    How can I view stdout/stderr of a startup application?

  23. 23

    GNU 병렬 정렬 stdout 및 stderr

  24. 24

    파일에 stderr 및 stdout 추가

  25. 25

    Bash 스크립트 stderr 및 stdout

  26. 26

    bash stdout + stderr를 한 파일로, stderr를 다른 파일로 리디렉션

  27. 27

    nc에 대한 STDOUT 및 STDERR 리디렉션

  28. 28

    변수를 사용한 Stdout 및 Stderr 리디렉션

  29. 29

    BASH 타임 스탬프를 stdout 및 stderr 앞에 추가

뜨겁다태그

보관