나는 이것이 이미 있다는 것을 안다.안좋다이전에 다루었지만 답변에 설명이 부족하거나 적용되지 않았습니다.
기본적으로 어느 시점에서 내 스크립트는 파일이 지정되었는지 확인해야 하며, 지정된 경우 나중에 입력으로 사용됩니다.
[ -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