Я просто пытаюсь заставить 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