제공된 경로가 없을 때 "cat" 명령이 중단되지 않도록 지시하는 방법은 무엇입니까?

제공된 경로가 없을 때 "cat" 명령이 중단되지 않도록 지시하는 방법은 무엇입니까?

나는 단순히
텍스트 파일의 내용을 반환하기 위해 bash 스크립트를 얻으려고 합니다.

#!/bin/bash
cat $1

문제는.. 파일 경로가 이 bash 스크립트에 제공되지 않을 때... 어떻게 자체적으로 닫힐 것인가입니다.

왜냐하면 일반 명령줄을 통해... cat 명령에 제공되는 파일 경로가 없으면... 중단되지 않기 때문입니다.

거의 뭔가를 기다리고 있는 것처럼..

답변1

#!/bin/bash
if [[ "$#" -ne 1 ]]; then
    echo "Usage: $0 [INPUT FILE]" 1>&2
    exit 1
fi
cat "$1"

답변2

귀하의 명령에는 또 다른 문제가 있습니다. 파일 이름에 공백이 있으면 어떻게 될까요?

#!/bin/bash
cat "$1"

인용하지 말아야 할 설득력 있는 이유가 없는 한 항상 인용하십시오. 그리고 cat ""멈추지 않습니다. 대신 "해당 파일이나 디렉터리가 없습니다"와 같은 오류 메시지가 생성됩니다.

답변3

catSTDIN파일 이름을 제공하면 무시됩니다 . 이 맥락에서는 STDIN에 연결하는 것이 /dev/null유효한 솔루션입니다.

$ cat test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh
$

0이 접근 방식의 단점은 파일 이름이 제공되지 않으면 반환된다는 것입니다 . 그 주위에는 방법이 없습니다. 지정된 파일을 열지 못하면 여전히 실패가 반환됩니다.

답변4

파일이 존재하는 경우에만 파일 내용을 표시하려면 다음을 수행하십시오.

#!/bin/bash
[ -f "$1" ] && cat "$1"

이 스크립트는 첫 번째 인수가 원하는 파일이라고 가정합니다.cat

관련 정보