![스크립트에서 표준 입력이 파일이나 파이프에서 나오는지 확인하세요.](https://linux55.com/image/23160/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%91%9C%EC%A4%80%20%EC%9E%85%EB%A0%A5%EC%9D%B4%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%82%98%20%ED%8C%8C%EC%9D%B4%ED%94%84%EC%97%90%EC%84%9C%20%EB%82%98%EC%98%A4%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EC%84%B8%EC%9A%94..png)
나는 이것이 이미 있다는 것을 안다.안좋다이전에 다루었지만 답변에 설명이 부족하거나 적용되지 않았습니다.
기본적으로 어느 시점에서 내 스크립트는 파일이 지정되었는지 확인해야 하며, 지정된 경우 나중에 입력으로 사용됩니다.
[ -f "$1" ] && TINPUT="$1"
충분히 간단합니다. 이제 TINPUT="-"
파일을 찾을 수 없거나 지정하지 않은 경우 표준 입력을 읽도록 다음 명령에 지시합니다.
내 질문은 다음과 같습니다. 파이프나 지정된 파일 없이 스크립트를 실행하는 경우 오류가 발생하면서 스크립트가 종료되도록 하려면 어떻게 해야 합니까?
저는 Debian POSIX 호환 쉘인 dash를 사용하고 있어서 Bashism을 사용할 수 없습니다. 나는 또한 목록 사용을 선호 ifs
하지만 대부분은 ifs
목록으로 작성할 수 있습니다.
답변1
표준 입력이 터미널인지 테스트할 수 있습니다.
if [ -n "$1" ]; then
exec <"$1"
elif tty >/dev/null; then
echo 1>&2 'Cowardly refusing to read data from a terminal.'
exit 2
# else we're reading from a file or pipe
fi