Я начал изучать Bash пару дней назад.
Я пытаюсь получить статус выхода grep
выражения в переменную, как это:
check=grep -ci 'text' file.sh
и вывод, который я получил,
No command '-ic' found
Должен ли я сделать это с помощью команды pipe?
bash
shell
command-line
grep
exit-status
Омри Гилхар
источник
источник
$?
сразу после завершения команды.Ответы:
Ваша команда,
будет интерпретатором как «запустить команду
-ci
с аргументамиtext
иfile.sh
, и установите значение переменнойcheck
на значениеgrep
в своей среде».Оболочка хранит значение переменной последней выполненной команды в переменной
?
. Вы можете присвоить его значение одной из ваших собственных переменных, например так:Если вы хотите воздействовать на это значение, вы можете использовать свою
check
переменную:или вы можете пропустить, используя отдельную переменную и проверяя
$?
все вместе:(обратите внимание
-q
, что он инструктируетgrep
ничего не выводить и выходить, как только что-то совпадает; нас на самом деле не интересует, что здесь совпадает)Или, если вы просто хотите «делать что-то», когда шаблон не найден:
Сохранение
$?
в другую переменную необходимо только в том случае, если вам нужно использовать его позже, когда значение в$?
было перезаписано, как вВ приведенном фрагменте кода,
$?
будет перезаписан результат[ "$err" -ne 0 ] && [ ! -d "$dir" ]
теста. Сохранение здесь действительно необходимо, только если нам нужно отобразить его и использовать сexit
.источник
Ваш вопрос неясен, но, исходя из представленного вами кода, похоже, что вы хотите, чтобы переменная
check
сохраняла состояние завершенияgrep
команды. Способ сделать это - запуститьПри выполнении команды из оболочки, ее статус выхода становится доступным через специальный параметр оболочки
$?
.Это задокументировано POSIX (стандартом для Unix-подобных операционных систем) в его спецификации для оболочки, а реализация Bash задокументирована в разделе « Специальные параметры» .
Поскольку вы новичок, я настоятельно рекомендую вам начать с хорошей книги и / или онлайн-учебника, чтобы получить основы. Рекомендации внешних ресурсов не рекомендуются на сайтах Stack Exchange, но я бы предложил Lhunath и GreyCat's Bash Guide .
источник
Вы сказали bash установить переменную
check=grep
в среде, которую она передает командено
ci
не существует.Я полагаю, что вы хотели заключить эту команду в обратные тики или в круглые скобки, перед которыми стоит знак доллара, причем любой из них назначил бы количество строк, на которых было найдено «текст» (без учета регистра) в файле:
Теперь
$check
должно быть 0, если совпадений нет, или положительное, если совпадений было.источник
Запутался, зачем использовать -c при проверке вывода? Он используется для проверки того, сколько раз что-то совпало - нет, успешно это или нет.
но в этом примере
Он не выводит ничего, кроме кода выхода, который затем отображается. Это вывод, который использует проверка переменных. Я тоже предпочитаю это, потому что это одна строка.
Вы можете заменить --silent на -q. Я использую его, поскольку вы не заинтересованы в выводе grep, просто работает он или нет.
источник
Правильный способ присвоения выходных данных команды grep переменной: @ monty-hardder:
Однако, чтобы назначить статус выхода этой команды переменной, вы должны использовать параметр оболочки
$?
сразу после выполнения команды, как показано ниже:источник