Как сказать, что “кошка” управляет для не держаний, когда нет никакого обеспеченного пути?

Ядро Linux работает на большой архитектуре, arch каталог в его источниках перечисляет 32 (некоторые - действительно несколько, как x86 и x86_64, рука является истинным зоопарком). Общее количество - вероятно, примерно 50.

5
21.06.2014, 12:50
7 ответов

Ваша команда также имеет другую проблему, что если в имени файла есть пробелы?

#!/bin/bash
cat "$1"

Всегда цитируйте, если у вас нет веских причин не делать этого. И cat "" не висит. Вместо этого она выдаст сообщение об ошибке типа "Нет такого файла или директории"

.
18
27.01.2020, 20:31
#!/bin/bash
if [[ "$#" -ne 1 ]]; then
    echo "Usage: $0 [INPUT FILE]" 1>&2
    exit 1
fi
cat "$1"
35
27.01.2020, 20:31

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, если не будет предоставлено имя файла. Обходного пути нет. Если не открыть указанный файл, то все равно будет возвращен сбой.

.
5
27.01.2020, 20:31
: | cat $1

Это была бы самая короткая часть кода, которая бы работала. Он должен молча игнорировать отсутствие файла.

Howeverm, это действительно то, что вам нужно? Я согласен с @Вальностью, что, вероятно, не следует использовать cat в этом контексте.

.
0
27.01.2020, 20:31

По умолчанию $1 до /dev/null, если его нет.

(Для этого можно легко разобраться в синтаксисе bash)

.
0
27.01.2020, 20:31

Я бы сказал, что cat здесь неподходящий инструмент, и именно поэтому вы получаете такое нежелательное поведение, cat предназначен для объединения набора файлов и записи вывода в другой файл, это причуда реализации, что ввод по умолчанию - stdin, а вывод по умолчанию - stdout.

Я бы сказал, что гораздо более подходящей командой здесь будет:

#!/bin/bash
cp ${1} /dev/stdout

Каталог dev stdout изначально предназначен только для Linux, однако, прежде чем меня кричат ​​за использование специфической для платформы конструкции bash (оболочка op явно заявила, что они используют ) реализует / dev / stdout как встроенный, поэтому его можно использовать на любой платформе с bash или ksh.

cp - это утилита, более подходящая здесь, поскольку она предназначена для копирования содержимого из одного файла в другой, и это именно то, что мы делаем здесь, копируя $ 1 в stdout

Эта команда также будет терпеть неудачу без ввода и работает в любой системе с bash, обратите внимание, что он предполагает, что пользователь правильно экранировал любые имена файлов с помощью нечетных символов, таких как пробел или \ n.

2
27.01.2020, 20:31

Чтобы отобразить содержимое файла, только если файл существует:

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

Этот скрипт предполагает, что первый аргумент - файл, который вы хотите cat

1
27.01.2020, 20:31

Теги

Похожие вопросы