#!/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 ответ
Вы можете просто передать my_variable
в качестве дополнительного аргумента оболочке, которая запускает format
. (Обратите внимание, что $0
не является первым аргументом функции.)
#!/bin/bash
my_variable=100
format () {
echo $1 # result of find
echo $2 # my_variable
}
export -f format
find . -type f -exec bash -c 'format "$1" "$2"' bash {} "$my_variable" \;
Фиктивный аргумент 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
один раз для каждого файла.
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.