Bash에서 프로세스 교체

Bash에서 프로세스 교체

다음 명령에서 "날짜"에 대한 출력이 표시되지 않는 이유를 누군가 설명할 수 있습니까? 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 기능이 아니며 일반 파일에서도 작동합니다(또는 작동하지 않습니다).

관련 정보