Ядро Linux работает на большой архитектуре, arch
каталог в его источниках перечисляет 32 (некоторые - действительно несколько, как x86 и x86_64, рука является истинным зоопарком). Общее количество - вероятно, примерно 50.
Ваша команда также имеет другую проблему, что если в имени файла есть пробелы?
#!/bin/bash
cat "$1"
Всегда цитируйте, если у вас нет веских причин не делать этого. И cat ""
не висит. Вместо этого она выдаст сообщение об ошибке типа "Нет такого файла или директории"
#!/bin/bash
if [[ "$#" -ne 1 ]]; then
echo "Usage: $0 [INPUT FILE]" 1>&2
exit 1
fi
cat "$1"
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
, если не будет предоставлено имя файла. Обходного пути нет. Если не открыть указанный файл, то все равно будет возвращен сбой.
: | cat $1
Это была бы самая короткая часть кода, которая бы работала. Он должен молча игнорировать отсутствие файла.
Howeverm, это действительно то, что вам нужно? Я согласен с @Вальностью, что, вероятно, не следует использовать cat
в этом контексте.
По умолчанию $1
до /dev/null
, если его нет.
(Для этого можно легко разобраться в синтаксисе bash)
.Я бы сказал, что cat здесь неподходящий инструмент, и именно поэтому вы получаете такое нежелательное поведение, cat предназначен для объединения набора файлов и записи вывода в другой файл, это причуда реализации, что ввод по умолчанию - stdin, а вывод по умолчанию - stdout.
Я бы сказал, что гораздо более подходящей командой здесь будет:
#!/bin/bash
cp ${1} /dev/stdout
Каталог dev stdout изначально предназначен только для Linux, однако, прежде чем меня кричат за использование специфической для платформы конструкции bash (оболочка op явно заявила, что они используют ) реализует / dev / stdout как встроенный, поэтому его можно использовать на любой платформе с bash или ksh.
cp - это утилита, более подходящая здесь, поскольку она предназначена для копирования содержимого из одного файла в другой, и это именно то, что мы делаем здесь, копируя $ 1 в stdout
Эта команда также будет терпеть неудачу без ввода и работает в любой системе с bash, обратите внимание, что он предполагает, что пользователь правильно экранировал любые имена файлов с помощью нечетных символов, таких как пробел или \ n.
Чтобы отобразить содержимое файла, только если файл существует:
#!/bin/bash
[ -f "$1" ] && cat "$1"
Этот скрипт предполагает, что первый аргумент - файл, который вы хотите cat