xargs с несколькими командами и max-args

i don't know where the Kernel which is used by Yocto is stored.

Файл конфигурации poky/meta/conf/machine/include/qemu.incсодержит следующие строки

   # Use a common kernel recipe for all QEMU machines
   PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"

Это указывает Bitbake искать рецепты ядра по путиpoky/meta/recipes -kernel/linux/

Теперь на этом пути вы увидите два рецепта

  • linux -yocto _4.1.bb
  • linux -yocto _4.4.bb

По задумке bitbake будет использовать linux -yocto _4.4.bb , т.е. ядро ​​4.4 будет собрано для машины qemux86. Это потому, что bitbake разработан так, чтобы отдавать предпочтение самой высокой версии рецепта.

I've decide to change the Kernel which is used by Yocto (as a learning exercise)

В конфигурационный файл, который я указал в начале этого ответа, можно добавить еще одну строчку

   PREFERRED_VERSION_linux-yocto = "4.1%"

Добавление этой строки заставит bitbake использовать poky/meta/recipes -kernel/linux/linux -yocto _4.1.bb рецепт, то есть ядро ​​4.1 для qemux86.

0
06.08.2019, 13:21
1 ответ

Не используйте {}как часть текста скрипта 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

Похожие:

2
28.01.2020, 02:29

Теги

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