명령 행 인수와 표준 입력에는 차이가 있습니다. 파이프는 한 프로세스의 표준 출력을 다른 프로세스의 표준 입력에 연결합니다. 그래서
ls | echo
ls의 표준 출력을 에코의 표준 입력에 연결합니다. 좋아요? echo는 표준 입력을 무시하고 명령 행 인수 (이 경우에는 없음)를 자체 stdout에 덤프합니다. 출력 : 전혀 없습니다.
이 경우 몇 가지 해결책이 있습니다. 하나는 stdin을 읽고 cat과 같은 stdout에 덤프하는 명령을 사용하는 것입니다.
ls | cat
작업 정의에 따라 '작동'합니다.
그러나 일반적인 경우는 어떻습니까? 실제로 원하는 것은 한 명령의 stdout을 다른 명령의 명령 행 args로 변환하는 것입니다. 다른 사람들이 말했듯 xargs이이 경우 표준 도우미 도구는 stdin에서 명령에 대한 명령 줄 인수를 읽고 실행할 명령을 구성합니다.
ls | xargs echo
대체 명령을 사용하여 이것을 일부 변환 할 수도 있습니다. $()
echo $(ls)
또한 원하는 것을 할 것입니다.
이 두 도구는 모두 쉘 스크립팅의 핵심입니다. 두 가지를 모두 배우십시오.
질문에서 알 수 있듯이 stdin을 명령 줄 args로 변환하는 다른 기본 방법은 쉘의 내장 read명령입니다. "단어"( IFS변수 로 정의 된 단어 )를 임시 변수 로 변환 하여 모든 명령 실행에서 사용할 수 있습니다.
ls | echo하십니까? 왜 단순히 달리지ls않습니까?