쉘 스크립트의 stdin으로 파일 입력을 사용하면 작동하지 않습니다.

쉘 스크립트의 stdin으로 파일 입력을 사용하면 작동하지 않습니다.

다음 스크립트 코드가 있습니다.

테스트 파일

echo "BEGIN"
while read CMD <&1; do
    [ -z "$CMD" ] && continue
    case "$CMD" in
    start)
            echo "get_start"
            ;;
    stop)
            echo "get_stop"
            ;;
    *)
            echo "get_uknown_command"
            ;;
    esac
    echo "END";
done

내가 그것을 실행할 때 :

$./test.sh <input.txt

내 스크립트가 잠겨 있습니다.

입력.txt

start
stop
sthh

내 스크립트가 왜 잠겨 있나요? 이 문제를 어떻게 해결할 수 있나요?

참고: 데이터를 수동으로 입력하면 스크립트가 잠기지 않습니다.

답변1

어쨌든 두 번째 줄은 부정확하고 지나치게 복잡합니다. 이것파일 설명자, stdin, stdoutstderr각각 0, 1, 이므로 원하는 내용을 2읽으려면stdin

while read CMD <&0; do 

그러나 stdin의 기본 입력은 이므로 read,

while read CMD; do

이것이 실제로 가장 쉬운 방법입니다. 이 방법으로 명령을 수동으로 입력하거나 명령줄에서 리디렉션을 사용하여 파일을 읽을 수 있습니다.

관련 정보