Запись zsh и вывод на другую команду

У меня был скрипт zsh

printf '%s\0' www/scripts6/lib/* | xargs -0 -I{} -P 50 babel {} > {} 

и это сработало (я думаю.). Но мне нужно было скопировать файлы в каталог scripts вместо scripts6 . Кроме того, мне нужно было добавить дополнительный путь к списку путей вручную, поэтому я попытался сделать это:

 paths=$(printf '%s\0' www/scripts6/lib/* | sed -e 's@www/scripts6/@@g') paths=$paths'main.js'$'\0' echo -n $paths | xargs -0 -I {} -P 50 babel www/scripts6/{} > www/scripts/{} 

Для меня это было БОЛЬШОЕ СОТРУДНИЧЕСТВО. Во всяком случае, скрипт создает файл с именем {} в каталоге scripts (и ничего в каталоге scripts/lib ). Это заставляет меня думать, что только первый {} в коде заменяется аргументом, а не вторым (и у меня нет объяснения отсутствия файлов в каталоге scripts/lib ).

Как я могу заставить скрипт работать как ожидалось?

One Solution collect form web for “Запись zsh и вывод на другую команду”

Перенаправление происходит до выполнения xargs . поэтому ваш первый пример также создает файл с именем {} , потому что у xargs никогда не было возможности заменить последний {} .

Кроме того, хотя вы пытаетесь отделить имена файлов по нулям, чтобы правильно обрабатывать имена файлов, усилия будут напрасны после использования echo . echo в zsh интерпретирует escapes стиля C (\ t, \ n и т. д.) по умолчанию. Вам понадобится опция -E, чтобы отключить это.

Попробуйте это и посмотрите, делает ли он то, что вы хотите

 setopt monitor for f in www/scripts6/lib/*(e*'REPLY=${REPLY#www/scripts6/}'*) main.js; do; while (( $#jobstates >= 51 )); do sleep 1 done echo -E babel $f \> www/scripts/$f & done 

Если вывод выглядит нормально, удалите эхо-E и замените \> на>

  • Почему `==` ведет себя по-другому внутри `` в zsh и bash?
  • Завершение первого аргумента cd OLD NEW
  • Zsh скрипт, как конкатенировать элементы массива со строкой
  • Редактирование вывода команды как новой команды
  • Zsh: автоматическое изменение выполняемой команды
  • обработка подстановки команд в рыбах против других оболочек (sh, bash, zsh)
  • tmux start process, если он еще не запущен
  • Как сделать RPROMPT в самом обновлении zsh при каждом входе?
  • Выключить и перезапустить контрольный код?
  • Как манипулировать переменной awk NF в zsh?
  • Есть ли хороший способ установить локальные переменные среды каталога / проекта?
  • Linux и Unix - лучшая ОС в мире.