linux найти позиционный параметр exec
В настоящее время я использую следующую строку, чтобы найти несколько скриптов и выполнить их. Сценарии называются: my_script_0.sh, my_script_1.sh и т. Д.
find $MY_HOME/SHELL/my_script_[0-9].sh -type f -exec csh -c '"$1" >& "$logfile" &' {} \;
Это прекрасно работает за исключением того, что теперь я хотел бы создать уникальный $logfile
для каждого из выполненных скриптов. Я понимаю, что используя awk, я мог бы сделать что-то вроде этого, чтобы получить номер файла и затем использовать его в имени файла журнала.
find $MY_HOME/SHELL/my_script_[0-9].sh -type f | awk -F"\\.|_" '{print $4}'
Проблема в том, что я не верю, что смогу использовать awk с исходным оператором, поскольку мне нужно, чтобы позиционный параметр был полным путем / именем файла.
В идеале я хотел бы просто использовать другой позиционный параметр с командой find -exec. Это существует?
1 ответ
-exec
возможность find
просто оправдывает приведенные аргументы. Так как вы передаете это csh -c ...
он запустит новую оболочку, в которую вы можете передать некоторые аргументы (один из которых {}
). Эти аргументы затем устанавливаются как позиционные аргументы $1, $2, $3, ... ,$n
в новой оболочке. В этом случае find
результаты передаются по одному и используются как $1
в оболочке.
Я предложу альтернативу вашему find
команда, которая использует цикл вместо:
foreach script ( $MY_HOME/SHELL/my_script_[0-9].sh )
csh -c "$script >& $script:r.log"
end
:r
удаляет расширение переменной, к которой он присоединен, так что мы получаем файл журнала: my_script_n.log
для сценария my_script_n.sh
,
Я проверил эти ссылки на синтаксис C-оболочки: