if [ who | grep $user | grep pts ]
then
write $user
message here
EOF
fi
여기서 실행하면 쓰기가 차단되고 수동으로 메시지를 입력한 다음 Ctrl+를 눌러야 합니다 d.
프로그램을 통해 메시지와 EOF를 보내는 방법이 있습니까?
답변1
당신은 할 수 있습니다한 프로그램에서 다른 프로그램으로 입력을 파이프라인으로 연결이와 같이:
echo "message here"|write $user
또는 다음과 같습니다:
cat /tmp/message|write $user
답변2
아마도 당신이 찾고 있는 것은 다음과 같은 작성 스타일입니다(다른 방법과 동일).
write $user <<EOF
message here
as opposed to the
echo "asd" | write $user
method, using here-doc redirection transparently allows multiple lines
and reads everything until seeing the delimiter
so the sent message end here:
EOF
참고: 여기서는 직접 "EOF 보내기"가 아닙니다. 쉘은 "EOF"라는 단어를 입력 종료 표시로 인식하고 거기에서 입력을 종료합니다. 이 경우 ctrl+d를 누르라는 메시지가 표시되지 않습니다. , 쉘이 파이프로 연결하는 내용을 읽고 있기 때문입니다.
참고 2: 이 내용을 꽤 많이 아는 것이 유용할 수 있습니다.모든유닉스 세계의 명령줄 도구는 이러한 종류의 기본 셸 트릭을 허용합니다. 이는 믿을 수 없을 만큼 보편적인 stdin 개념에만 의존하기 때문입니다. 쓰기는 다른 많은 도구와 마찬가지로 파이프로 연결된 내용을 읽고 요청만 합니다. 그러한 항목이 없고 사용자 입력 방법이 적합할 경우 사용자가 대화식으로 입력합니다.
자세한 내용을 보려면 여기에 정확히 이에 대한 질문이 있습니다.https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash