Передача результатов от поиска к функции - PullRequest
0 голосов
/ 29 апреля 2020
#!/bin/bash
my_variable=100
format () {
    echo $0 ##result of find
    echo $1 ##my_variable
}
export -f format 
find . -type f -exec bash -c format {} \;

Есть ли способ передать my_variable вызов функции в команде поиска?

1 Ответ

4 голосов
/ 29 апреля 2020

Вы можете просто передать my_variable в качестве дополнительного аргумента оболочки: format. (Обратите внимание, что $0 не является первым аргументом функции.)

#!/bin/bash
my_variable=100
format () {
    echo $<b>1</b>  # result of find
    echo $<b>2</b>  # my_variable
}
export -f format 
find . -type f -exec bash -c <b>'format "$1" "$2"' bash {} "$my_variable"</b> \;

Пустой аргумент bash используется для установки $0 в команде, так что {} является первым позиционный аргумент для передачи format.

Чтобы уменьшить количество раз, которое вам нужно запустить bash, вы можете использовать форму -exec ... +:

find . -type f -exec bash -c 'v=$1; shift; for f; do format "$f" "$v"; done' \
   bash "$my_variable" {} +

Это проходит несколько файлов в оболочку одновременно; скрипт отвечает за извлечение my_variable из списка аргументов, а затем перебирает остальные, вызывая format один раз для файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...