Bash выдает справочное сообщение, когда аргументы не найдены с помощью cat - PullRequest
0 голосов
/ 09 февраля 2019

То, что я также должен сделать, - это то, что если нет аргументов, я должен вывести «справочное» сообщение на стандартное устройство ошибок с помощью cat.Пока я могу понять и заставить его работать, используя echo, но моя задача - сделать это только с помощью cat.Когда я пытаюсь набрать строку cat 2> (help message), она переходит на новую строку, где я могу напечатать что угодно и приводит к тому, что скрипт вообще не работает должным образом, единственным выходом является ctrl + z.Как это можно сделать, используя cat вместо echo?С сообщением stderr, все еще распечатываемым, если это возможно, используя только cat?

Справочное сообщение

Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----.

Код

#!/bin/bash
# concat script
if [[ $@ ]]
then
        for i in "$@"
        do
         cat "$i" && echo  "-----"
        done
exit 0
else
 cat 2> "Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----."
exit 1
fi

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

cat используется для вывода данных из файла.Чтобы вывести данные из строки, используйте echo.

2> для перенаправления stdout в файл.Чтобы указать stdout на stderr, используйте >&2.

Всего:

echo >&2 "Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----."

Если вы действительно хотите избежать использования правильного инструмента для работы, вы можете переписать его с точки зренияВот документ (создающий временный файл, из которого кошка может читать):

cat << EOF >&2
Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----.
EOF
0 голосов
/ 09 февраля 2019

Если вы хотите напечатать сообщение на stderr с cat, а не echo, попробуйте:

cat <<< "Usage: ..." >&2
...