Присвоение значения переменной readonly при объявлении

Не используйте {}как часть текста скрипта sh -c(проблема аналогична описанной в принятом ответе на Можно ли использовать `find -exec sh -c `безопасно?).

Вместо:

printf '%s\n' file* | xargs -n 3 sh -c './code output.txt "$@"; command2; command3' sh

Это будет работать, если имя файла не содержит символов новой строки. Если ваш xargsимеет нестандартную -опцию -0(, наиболее распространенная реализация имеет ), следующее также будет работать для имен файлов с символами новой строки:

printf '%s\0' file* | xargs -0 -n 3 sh -c './code output.txt "$@"; command2; command3' sh

"$@"(кавычки важные)будут расширены до списка позиционных параметров внутри скрипта sh -c. Это имена файлов, присвоенные сценарию xargs. Кажущееся бесполезным shв самом конце будет помещено в $0в скрипте sh -cи использовано во всех сообщениях об ошибках, которые выдает эта оболочка (, она не является частью"$@").

В оболочке zsh(, но не в, например. bashили sh),вместо этого вы могли бы сделать

for name1 name2 name3 in file*; do
   ./code output.txt $name1 $name2 $name3
    command2
    command3
done

Похожие:

0
13.09.2021, 07:40
0 ответов

Теги

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