![Bash에서 프로세스 교체](https://linux55.com/image/157147/Bash%EC%97%90%EC%84%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B5%90%EC%B2%B4.png)
다음 명령에서 "날짜"에 대한 출력이 표시되지 않는 이유를 누군가 설명할 수 있습니까? STDIN에 N개 숫자를 입력하면 마지막(N-1) 명령만 출력되나요?
[root@RAJ-RHEL6 raj]# cat < <(date) <(hostname) <(uptime) <(cat /etc/resolv.conf)
RAJ-RHEL6.5
02:22:59 up 2:36, 1 user, load average: 0.00, 0.00, 0.00
nameserver 10.207.26.248
[root@RAJ-RHEL6 raj]#
답변1
한 곳에서만 표준 입력 스트림을 리디렉션할 수 있습니다. 여러 파일에서 리디렉션하거나 단일 명령으로 대체 항목을 처리할 수 있다고 기대할 수는 없습니다.
주문하다
cat < <(date) <(hostname) <(uptime) <(cat /etc/resolv.conf)
동일합니까?
cat <(hostname) <(uptime) <(cat /etc/resolv.conf) < <(date)
즉, cat
세 개의 입력 파일을 제공한 다음 출력을 date
표준 입력으로 리디렉션합니다.
사용할 파일이 제공되면 cat
유틸리티는 표준 입력 스트림을 사용하지 않지만 특수 파일 이름을 사용하여 그렇게 하도록 할 수 있습니다 -
.
cat - <(hostname) <(uptime) <(cat /etc/resolv.conf) < <(date)
또한 마지막 프로세스 대체는 쓸모가 없으므로 명령은 다음과 같이 작성하는 것이 좋습니다.
cat - <(hostname) <(uptime) /etc/resolv.conf < <(date)
또는 출력 리디렉션이 없는 date
경우
cat <(date) <(hostname) <(uptime) /etc/resolv.conf
또는 단일 명령으로 대체하여
cat <( date; hostname; uptime; cat /etc/resolv.conf )
또는 프로세스 대체가 없는 경우,
date; hostname; uptime; cat /etc/resolv.conf
관련된:
답변2
~에 따르면man cat
파일을 표준 출력에 연결합니다.
FILE이 없거나 FILE이 -이면 표준 입력을 읽습니다.
따라서 FILE을 제공하면 표준 입력을 읽지 않습니다.
이것은 bash 기능이 아니며 일반 파일에서도 작동합니다(또는 작동하지 않습니다).