Получите переменную сценария в подоболочку, запущенную находкой

При следовании за этим вопросом я использовал следующую команду в сценарии удара:

find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$1" &>/dev/null ;then echo"$1" >>${log_file} ;svnadmin verify "$1" 2>>{log_file} ;fi' _ {} \;

Обе переменные определяются в начале сценария. Переменный $svn_root соответственно расширен, но переменная $log_file не.

Я вижу, что переменная не передается ни в один из -exec bash -c команда, я принимаю поэтому, что это - подоболочка? Я могу скользить log_file=/path/to/log ; перед echo часть строки, но такие твердые коды, что часть команды, если я заменяю переменную в сценарии, не изменяя его в находке, управляет, чтобы я произвел к двум отдельным файлам журнала!

Я могу импортировать/экспортировать ту переменную в ту подоболочку (если вот что это значит)?

2
задан 13 April 2017 в 15:24

3 ответа

Существует главным образом два пути:

  1. Передача это как второй аргумент оболочке

    find ... -exec bash -c '...' _ {} "$log_file" \;
    

И затем Вы используете "$2" вместо ${log_file} внутренняя часть сценарий

  1. Передача это через среду:

    log_file=$log_file find ... -exec bash -c '...' _ {} \;
    

BTW, это не подоболочка.

3
ответ дан 2 December 2019 в 01:45

Необходимо смочь видеть такие переменные в подоболочке при использовании двойных кавычек с bash -c "".

А более простой метод был бы ко всего export log_file переменная в Вашем основном сценарии следующим образом:

export log_file

Источник: , Как к “send” переменной для подокружения?

1
ответ дан 2 December 2019 в 01:45

Используя

find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$0" &>/dev/null ;then echo"$0" >> "$1" ;svnadmin verify "$0" 2>> "$1" ;fi' {}  "$log_file" \;

Вам нужно $0 и $1, потому что это не функция или сценарий.

2
ответ дан 2 December 2019 в 01:45

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

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