명령의 경우 -
파일 이름 대신 인수로 사용하면 STDIN 또는 STDOUT을 의미합니다.
그러나이 예에서는 이름이
-
다음 과 같은 파일을 만듭니다 .echo hello > -
내가 할 수있는 방법
-
이 예제에서는 STDOUT을 의미?반대로, 어떻게 다음과 같은 예제에서
-
이름이 지정된 파일을 만들 수 있습니까?-
cat -
2>&-
"가까운 설명자 2"를 의미하는 구성 도 있습니다 .
명령의 경우 -
파일 이름 대신 인수로 사용하면 STDIN 또는 STDOUT을 의미합니다.
그러나이 예에서는 이름이 -
다음 과 같은 파일을 만듭니다 .
echo hello > -
내가 할 수있는 방법 -
이 예제에서는 STDOUT을 의미?
반대로, 어떻게 다음과 같은 예제에서 -
이름이 지정된 파일을 만들 수 있습니까?-
cat -
2>&-
"가까운 설명자 2"를 의미하는 구성 도 있습니다 .
답변:
-
stdin / stdout을 의미하기 위해 파일 이름으로 사용 하는 것은 많은 프로그램에서 사용하는 규칙입니다. 파일 이름의 특별한 속성이 아닙니다. 커널은 -
특별한 것으로 인식하지 않으므로 -
파일 이름으로 언급되는 모든 시스템 호출 은 -
문자 그대로 파일 이름으로 사용 됩니다.
bash 리디렉션을 사용하면 -
특수 파일 이름으로 인식되지 않으므로 bash는 해당 파일 이름을 리터럴 파일 이름으로 사용합니다.
cat
문자열 -
을 파일 이름으로 볼 때 stdin의 동의어로 취급합니다. 이 문제를 해결하려면 cat
이라는 파일을 참조하는 방식으로 보이는 문자열을 변경해야합니다 -
. 이 일의 일반적인 방법은 경로와 파일 이름을 접두사이다 - ./-
, 또는 /home/Tim/-
. 이 기술은 명령 줄 옵션이 파일 이름과 충돌하는 유사한 문제를 해결하는 데에도 사용됩니다 . 예를 들어, 파일은 프로그램 ./-e
의 -e
명령 줄 옵션으로 표시되지 않습니다 .
/dev/stdin
와 /dev/stdout
보편적으로 사용할 수 있으며 대신 사용할 수 있습니다 -
규칙.
cat
경우 인수를 나열하는 대신 리디렉션을 사용하면 도움이 될 수 있습니다. cat <-
; 그러나 한 번에 두 개 이상의 파일을 연결하여이를 혼합하고 일치시키기는 어렵습니다.
jmtd
의 질문에 대한 답을 알고 있다면 매우 궁금합니다 . :)
으로 언급 camh , -
단지 일부 프로그램에 의해 사용되는 명명 규칙입니다. 쉘이 인식 할 파일 디스크립터로 이러한 스트림을 참조하려면 jiliagre가 이름을 사용 /dev/stdin
하거나 /dev/stdout
대신 사용하는 것이 정확 합니다. 이러한 파일 이름은 정상적인 파일 이름이 작동하는 모든 장소에서 작동해야합니다.
즉, 첫 번째 예는 어리석은 것입니다. 경로 재 지정 연산자가 파일에 쓰기 위해 포착 한 출력은 이미 표준 출력이므로 ON으로 경로 재지 정하고 원래 위치로 다시 쓰는 것은 쓸모가 없습니다. 파이프를 사용하는 동작은 리디렉션이 아니라 파이프입니다.
echo hello |
두 번째 예에서는 내부 별칭이 아닌 해당 이름의 문자 파일을 원한다는 표시 만하면됩니다. 다음과 같이 파일 경로를 지정하여 가장 쉽게 수행 할 수 있습니다.
cat ./-
'-'접근 방식에는 많은 문제가 있습니다. 우선 '-'문자의 해석이 필요하며 많은 프로그램이 그러한 해석을 수행하지 않습니다. 또한 명령 줄 옵션의 끝을 표시하는 구분 기호로 하이픈을 해석하는 일부 프로그램이 있습니다. 프로그램은 파일 이름 인수와 함께 작동하도록 작성되었으며 '-'접근법은 훌륭하지만 약합니다.
가장 좋은 방법은 다음과 같습니다.
$ echo hello > /dev/fd/1
/dev/stdout
의 심볼릭 링크입니다 /dev/fd/1