Ubuntu 14.04에서 다음 스크립트를 실행하고 있습니다.
#!/bin/bash
apt-get purge -y nginx
apt-get install -y nginx
date
이렇게 실행하면 cat /tmp/script | bash
apt-get이 설치를 시작한 다음 "날짜"(실제 날짜가 아니라 명령 이름)를 인쇄하고 나머지 apt-get 출력을 인쇄합니다.
그러나 이와 같이 스크립트를 실행하면 /tmp/script
예상대로 작동합니다. apt-get이 완료된 후 날짜가 인쇄됩니다.
왜 이런 일이 발생합니까? bash를 직접 호출할 때와 파이프로 연결할 때 동일한 방식으로 작동하도록 하려면 어떻게 해야 합니까?
답변1
개별 명령의 표준 입력을 닫거나 리디렉션해야 합니다.
#!/bin/bash
apt-get purge -y nginx <&-
apt-get install -y nginx <&-
date
그렇지 않으면 후속 행이 명령에 입력됩니다.