상상하다:
$ 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
쉘이나 이와 유사한 방식으로 호출했습니까?
아니요.
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이 무언가를 성공적으로 컴파일하면 기호 링크의 대상에 쓰지만, 컴파일이 실패하면 기호 링크 자체를 삭제합니다.