Описание тега guernsey
Я пытаюсь построить команду, которая передает результаты работы одной команды grep для другой команды grep в функцию bash. В конечном счете, я хочу, чтобы команда была выполнена, чтобы выглядеть так:
грэп -я -Р фрагментик /код/внутренние устройства/dev/ /код/государственные/разработки/ | грэп .c:\/.h:
Функция я пишу магазинах первая часть команды в строку, а затем добавляет вторую часть:
grep_cmd="грэп -я -Р $картины $@"
если (( ${#file_types[@]} > 0 )); тогда
file_types="${file_types[@]}"
file_types=.${file_types// /':\|.'}:
grep_cmd="$grep_cmd | грэп $file_types"
интернет
Эхо "$grep_cmd"
${grep_cmd}
Это вызывает ошибку после выхода из первой части:
команда grep: |: нет такого файла или каталога
команда grep: команда grep: нет такого файла или каталога
грэп: .c:\/.h:: нет такого файла или каталога
Изменив последнюю строку из ${grep_cmd}
для всего "$grep_cmd"
не отображает выходные данные из первой части и выдает разные ошибки:
Баш: грэп -я -Р фрагментик /код/внутренние устройства/dev/ /код/государственные/разработки/ | грэп .c:\/.h:: нет такого файла или каталога
На это так ответить, я попыталась изменить последнюю строчку на $(grep_cmd)
. Это бросает ошибку:
Баш: grep_cmd: команда не найдена
Это так ответ предлагает использовать функцию eval $grep_cmd
. Это приводит к ошибкам, но и запрещает вывод.
Это один предлагает использовать функцию eval ${grep_cmd}
. Это те же результаты (подавляет ошибки и выход). Я пробовал включать отладку в bash (с набора -х
), что дает мне это:
+ эвал грэп -я -Р фрагментик /код/внутренней/разработки/ /код/государственные/Дев/ '|' команда grep '.c:\/.h:'
++ грэп -я -Р фрагментик /код/внутренней/разработки/ /код/государственные/Дев/
++ команда grep '.c:/.h:'
Похоже, что труба будет экранирован, поэтому Shell интерпретирует команды, а две команды. Как мне правильно защитить трубы характером, поэтому она воспринимает его как одну команду?