设想:
$ 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 :