设想:
$ 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)
答案1
这是由于以下问题:https://github.com/llvm/llvm-project/issues/54086:
如果“-o”指定符号链接,则当 clang 成功编译某些内容时,它会写入符号链接的目标,但当编译失败时,它会删除符号链接本身。