Ошибка в команде GREP для выхода из скрипта UNIX

Для вывода списка скрытых файлов и каталогов в текущем каталоге, включая. и ..:

echo .*

Чтобы рекурсивно перечислить скрытые файлы и каталоги в текущем каталоге и его подкаталогах:

find . -name '.*'

Если вы хотите сохранить результаты в файл, используйте перенаправление:

find . -name '.*' >output-file.txt
0
25.10.2018, 17:09
1 ответ

Ваш скрипт использует значение $rc1в качестве имени файла, но это результат grep.

Чтобы подать выход первого grepв другой grep, используйте трубу:

grep -v... filename | grep...

Вместо сохранения результата grepв переменных (, которые предположительно могут быть довольно большими ), пусть тест ifвоздействует непосредственно на результат запуска этого конвейера:

if grep -v -F 'Msg 2714' "$Logfilename" | grep -q -F Msg; then
    echo 'Error message, some query has failed' >&2
    exit 1
fi

При этом используется статус выхода конвейера (, который будет статусом выхода grep -q), чтобы определить, должен ли сценарий выводить сообщение об ошибке и завершать работу. Нет необходимости хранить данные в переменных.

grep -qничего не выведет, но успешно завершится, если заданный шаблон совпадает. Я также использовал -Fс обоими вызовами grep, так как мы сопоставляем строки, а не регулярные выражения.

Я также следую общему правилу, что сообщения об ошибках генерируются в стандартном потоке ошибок (с echo... >&2в данном случае )и что скрипт завершится с не-нулевым статусом выхода после фатальная ошибка.

Также, возможно, имеет отношение к тому, что вы не -цитируете расширения переменных:

3
28.01.2020, 02:23

Теги

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