Io-Redirection

echo ‘Hello World’ > /dev/stdout 什麼也不列印

  • February 28, 2022

設想:

$ echo "Hello World" > /dev/stderr
Hello World

$ echo "Hello World" > /dev/stdout

$ uname -a
CYGWIN_NT-10.0 xxx 3.3.4(0.341/5/3) 2022-01-31 19:35 x86_64 Cygwin

為什麼echo "Hello World" > /dev/stdout什麼都不列印?如何解決問題?

UPD。

echo "Hello World"列印正常嗎?

是的:

$ echo "Hello World"
Hello World

如果沒有,你是否exec >/dev/null在 shell 中呼叫或類似的?

不。

UPD2。找到它停止工作的地方:

$ clang t554.c -std=c11 -pedantic -Wall -Wextra -c -S -O3 -o /dev/stdout
       .text
       <asm code>

# "exxxtern" was a typo
$ clang t554.c -std=c11 -pedantic -Wall -Wextra -c -S -O3 -o /dev/stdout
t554.c:6:3: error: use of undeclared identifier 'exxxtern'
               exxxtern int xxx;
               ^
1 error generated.


TASKING+pavel.morozkin@SPBPC023 ~
$ clang t554.c -std=c11 -pedantic -Wall -Wextra -c -S -O3 -o /dev/stdout
# nothing is printed for the 1st time

UPD3。我可以在另一台機器上用 clang 重現它:

$ clang t455.c -S -o /dev/stdout
       .text
       <asm code>

# introduce the error

$ clang t455.c -S -o /dev/stdout
t455.c:26:1: error: unknown type name 'x'
x
^
t455.c:26:2: error: expected identifier or '('
x
^
2 errors generated.

# fix the error

$ clang t455.c -S -o /dev/stdout
# nothing is printed

$ clang --version
clang version 8.0.1 (tags/RELEASE_801/final)

這是由於問題:https ://github.com/llvm/llvm-project/issues/54086 :

如果“-o”指定一個符號連結,當clang成功編譯某些東西時,它會寫入符號連結的目標,但是當它編譯失敗時,它會刪除符號連結本身。

引用自:https://unix.stackexchange.com/questions/692105