누군가가 다음 이유를 설명할 수 있기를 바랍니다.하다일하다:
# < /dev/urandom tr -dc 'a-zA-Z' | head -c 12
이전에 "|" 없음티, 그러나 다음과 같은 경우에는 그렇지 않습니다.
# < /dev/urandom | tr -dc 'a-zA-Z' | head -c 12
(이것은 간단한 비밀번호 생성기입니다)
다음과 어떻게 다른지 설명할 수도 있습니다.
# gunzip < HP-Fax4-hpcups.ppd.gz cat > ouT1
--- 물론 이것은 실패합니다.
gzip: cat.gz: No such file or directory
그러나 cat 앞에 '|'가 제외되면 (pipe) 앞에 '|'와 함께 사용할 수 있습니다 cat
.
# gunzip < HP-Fax4-hpcups.ppd.gz | cat > ouT1
답변1
무엇인가요
<
?파일에서 읽기 위해 명령 입력을 리디렉션하는 것입니다. 명령 앞이나 뒤에 넣을 수 있습니다.
$ echo abcd > in $ cat in abcd $ cat <in abcd $ <in cat abcd
간단히 말해서 이 명령은 파일을 읽습니다.
cat in
와 의 차이점cat <in
은<
프로세스에 대해 STDIN(표준 입력)의 리디렉션을 설정하는 대신 명령이 내부적으로 작업을 수행해야 하는 매개변수 라는cat
것입니다 . (열어서 읽어보세요.)cat in
in
cat
무엇인가요
|
?프로세스의 리디렉션입니다. 다음 명령만 따를 수 있습니다.
$ | cat in bash: syntax error near unexpected token `|' $ cat in | cat abcd $ cat in | cat | >
(...입력을 기다리는 중...)
이것은 무엇을 하는가:
< /dev/urandom tr -dc 'a-zA-Z' | head -c 12
?더 작은 부분으로 나누세요(리디렉션이 포함된 명령).
< /dev/urandom tr -dc 'a-zA-Z'
=tr -dc 'a-zA-Z'
그리고< /dev/urandom
의미: 읽은 내용의 번역입니다
urandom
.|
- 익명 파이프를 사용하여 프로세스로 리디렉션head -c 12
- 리다이렉트를 받는 과정입니다.
이 전체 라인이 의미가 있지 않습니까?
이것은 무엇입니까:
< /dev/urandom | tr -dc 'a-zA-Z' | head -c 12
?분해:
< /dev/urandom
-주문 불가그리고 에서 리디렉션/dev/urandom
|
- 익명 파이프를 사용하여 프로세스로 리디렉션tr -dc 'a-zA-Z'
- 리디렉션을 받는 프로세스- 등...
어떻게 되어가나요? 첫 번째 "문장"에는 명령이 없습니다.
무엇인가요
>
?그러면 이 명령의 출력이 파일로 리디렉션됩니다. 와 동일하며
<
명령 앞이나 뒤에 사용할 수 있습니다.$ >out echo abcd $ cat out abcd $ echo dcba >tuo $ cat tuo dcba
이것은 무엇을 하는가:
gunzip < HP-Fax4-hpcups.ppd.gz | cat > ouT1
?분석하다:
gunzip < HP-Fax4-hpcups.ppd.gz
=HP-Fax4-hpcups.ppd.gz
다음으로 리디렉션( 이 파일을 읽gunzip
겠습니다 )gunzip
|
- 출력을 프로세스로 리디렉션cat > ouT1
=는cat
리디렉션을 수신한 다음 해당 출력을 파일로 리디렉션하는 프로세스입니다.ouT1
괜찮아요. 모든 부분이 의미가 있습니다.
그래서 이것은 무엇입니까:
gunzip < HP-Fax4-hpcups.ppd.gz cat > ouT1
?관련된 모든 당사자가 이에 대해 어떻게 말해야 하는지 100% 확신할 수는 없지만 추측해 보겠습니다. 오류는 다음과 같습니다.
gzip: cat.gz: No such file or directory
이 오류의 첫 번째 단어는
gzip
gzip이 실행되었음을 알리는 것입니다. 우리는 또한 명령을 해석하기 전에 판매에 의해 리디렉션이 설정된다는 것을 알고 있습니다(적어도 저는 알고 있습니다). 그래서 저는 이렇게 분석합니다.< HP-Fax4-hpcups.ppd.gz
-shell은 프로세스 입력 리디렉션을HP-Fax4-hpcups.ppd.gz
ie로 설정합니다. 실행할 명령은 이 파일에서 읽혀집니다.> ouT1
- 명령의 출력은 다음으로 리디렉션됩니다.ouT1
여태까지는 그런대로 잘됐다. 이제 테이블에 남은 것은 입니다
gunzip cat
. 이에 대한 표준 설명은 이것이gunzip
명령이자cat
인수라는 것입니다. 이제gunzip
IN 및 OUT 리디렉션이 설정된 상태로 실행되고cat
첫 번째 인수로 문자열을 가져옵니다. 어떻게 든 오류가 발생합니다.gzip: cat.gz: No such file or directory
또 무슨 뜻인가요?
gzip
찾을 수 없다고 하더군요cat.gz
. 그 파일로 뭔가를 하고 싶어하지만(열 가능성이 높음) 그러한 파일이나 디렉터리가 없습니다. 그러므로 그것을 인수로cat.gz
사용해야 하는 이유는 내부적인 문제임에 틀림없다.cat
간단한 실험에서는 gzip 형식의 인수가 필요하다는 것을 보여줍니다.$ echo asdf > cat.gz $ gunzip < in cat > ouT1 gzip: cat.gz: not in gzip format
여기 파일은
in
간단한 텍스트 파일이므로 빈 줄이 있다고 가정합니다.