Io-Redirection
echo ‘Hello World’ > /dev/stdout 什麼也不列印
設想:
$ 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成功編譯某些東西時,它會寫入符號連結的目標,但是當它編譯失敗時,它會刪除符號連結本身。