it-swarm-ko.tech

파일 이름 대신 대시 (-) 사용

명령의 경우 파일 이름 대신 -를 인수로 사용하면 STDIN 또는 STDOUT을 의미합니다.

  1. 그러나이 예에서는 이름이 - 인 파일을 만듭니다.

    echo hello > -
    

    이 예에서 -를 어떻게 STDOUT으로 만들 수 있습니까?

  2. 반대로, -가 다음과 같은 예에서 -라는 파일을 의미하게하려면 어떻게해야합니까?

    cat -
    
121
Tim

Stdin/stdout을 의미하기 위해 파일 이름으로 -를 사용하는 것은 많은 프로그램에서 사용하는 규칙입니다. 파일 이름의 특별한 속성이 아닙니다. 커널은 -를 특별하게 인식하지 않으므로 -를 파일 이름으로 참조하는 시스템 호출은 문자 그대로 -를 파일 이름으로 사용합니다.

Bash 리디렉션을 사용하면 -는 특수 파일 이름으로 인식되지 않으므로 bash는 해당 파일 이름을 리터럴 파일 이름으로 사용합니다.

cat가 문자열 -를 파일 이름으로 볼 때 stdin의 동의어로 취급합니다. 이 문제를 해결하려면 cat에 보이는 문자열을 여전히 -라는 파일을 참조하는 방식으로 변경해야합니다. 이 작업을 수행하는 일반적인 방법은 파일 이름 앞에 경로 ./- 또는 /home/Tim/-를 붙이는 것입니다. 이 기술은 명령 줄 옵션이 파일 이름과 충돌하는 유사한 문제를 해결하는 데에도 사용되므로 ./-e라는 파일이 프로그램에 대한 -e 명령 줄 옵션으로 나타나지 않습니다. .

169
camh
  1. 대신에 echo hello > -, 당신이 사용할 수있는 echo hello > /dev/stdout.

    '-'는이를 지원하려는 각 프로그램에 의해 구현되어야하는 규칙이지만, /dev/stdin, /dev/stdout/dev/stderr는 OS에서 지원할 때 (적어도 Solaris, Linux 및 BSD는 지원함) 응용 프로그램과 상관없이 원하는대로 작동합니다.

18
jlliagre

camh 언급 , -은 일부 프로그램에서 사용되는 명명 규칙입니다. 셸에서 인식 할 파일 디스크립터를 사용하여 이러한 스트림을 참조하려면 jiliagre가 정확함/dev/stdin 또는 /dev/stdout 대신에. 이러한 파일 이름은 정상적인 파일 이름이 작동하는 모든 위치에서 작동해야합니다.

  1. 즉, 첫 번째 예는 어리석은 것입니다. 경로 재 지정 연산자가 파일에 쓰기 위해 포착 한 출력은 이미 표준 출력이므로 ON으로 경로 재지 정하고 원래 위치로 다시 쓰는 것은 쓸모가 없습니다. 파이프를 사용하는 동작은 리디렉션이 아니라 파이프입니다.

    echo hello |
    
  2. 두 번째 예에서는 내부 별칭이 아닌 해당 이름의 문자 파일을 원한다는 표시 만하면됩니다. 다음과 같이 파일 경로를 지정하여 가장 쉽게 수행 할 수 있습니다.

    cat ./-
    
10
Caleb

1은 프로그램이이를 지원해야합니다. 임의로 사용할 수는 없습니다. 2의 경우 입력을 리디렉션하십시오 (예 : cat < -).

6
bahamat

'-'접근 방식에는 많은 문제가 있습니다. 우선 '-'문자에 대한 해석이 필요하며 많은 프로그램이 그러한 해석을 수행하지 않습니다. 또한 하이픈을 명령 줄 옵션의 끝을 표시하는 구분 기호로 해석하는 일부 프로그램이 있습니다. 프로그램은 파일 이름 인수와 함께 작동하도록 작성되었으며 '-'접근법은 훌륭하지만 약합니다.

가장 좋은 방법은 다음과 같습니다.

$ echo hello > /dev/fd/1

/dev/stdout/dev/fd/1의 심볼릭 링크입니다.

1
b3h3m0th

특수 문자에는 주로 두 가지 의미가 있습니다.

ASCII 숫자 형 차트.

스크립팅 또는 상징.

단일 문자가 문자열을 나타내거나 문자열로 작동 할 수 있습니다. 내 이해로.

c 언어에서 fopen() 함수는 첫 번째 파일 스트림과 파일이 열리는 두 번째 모드의 두 인수를 취합니다. 모드는 문자열입니다. 단일 문자 인 경우에도 마찬가지입니다.

고양이> "-"작동합니다.

0
Owais Qureshi