добавьте критерий поиска к имени файла журнала

Я записал сценарий (fetch.sh) искать условия в файлах PDF (старые оцифрованные газеты OCR'd) использование PDFGREP. Это работает отлично. Это предлагает пользователю критерий поиска (foo) и файл для поиска (year.pdf).

Я хочу получить вывод к журналу, все еще отображая результаты на экране. Я успешно использовал | tee log сделать это 3 пути

  1. от подсказки: fetch.sh | tee log

  2. от подсказки: fetch.sh | tee log.foo

  3. в сценарии я могу сделать:

    (
       fetch.sh
    ) | tee log
    

То, что я действительно хочу, должно сделать это как часть fetch.sh но быть формата log.foo (формат файла 2. но выполняемый как 3).

Внутри fetch.sh Я попробовал:

  • ) | tee log.$foo ... файл урожаев называют log.

  • ) | tee log."$foo" ... файл урожаев называют log.

  • ) | tee log.'$foo' ... урожаи log.$foo (литерал, никакая замена на $foo)

  • ) | tee log.${foo} ... файл урожаев называют log.

  • ) | tee log."${foo}" ... yields file namedжурнал.'

  • ) | tee log.'${foo}' ... урожаи log.${foo} (литерал, никакая замена на $foo)

Во всех случаях правильно получен вывод, но имя файла никогда не, что я хочу. Что я делаю неправильно?

0
задан 15 September 2016 в 10:59

1 ответ

Проблема, которую Вы имеете, состоит в том, что при помощи ( ... ), Вы выполняете все команды в подоболочке текущего процесса. Поскольку эта подоболочка является дочерним процессом, никакие переменные, которые Вы присвоили, не будут переданы родителю (Ваш основной сценарий). Это означает, что переменная никогда не достигает Вашего tee команда.

решение довольно просто, в рамках Вашего сценария, который необходимо присвоить переменной перед запуском скобок эта переменная затем будет доступна эти tee команда.

, Например, если расширение файла Вы хотели добавить, .txt:

foo=txt
(
commands from fetch.sh
) | tee log."$foo"

Примечание, что я использовал двойные кавычки, которые оболочка развернет, чтобы удостовериться, что, в маловероятном случае, что Ваше расширение содержит пробелы, это все еще неповреждено после расширения.

, Если необходимо установить foo из fetch.sh, необходимо будет использовать другой метод группировки команд сценария.

2
ответ дан 28 September 2019 в 14:06

Другие вопросы по тегам:

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