Как заставить команду «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

catпроигнорирует STDIN, если вы предоставите ему имя файла. Подключение 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

Связанный контент