2017-01-16 3 views
-2

У меня есть эта команда, которая выводит все имена папок всех пакетов в проекте lerna.Замена Bash внутри lerna exec не работает

lerna exec -- node -e 'console.log(path.basename(process.cwd()))' 

У меня есть эта команда, которая должна заменить имя имя каждого Lerna пакета в пределах package.json с именем папки. Он использует замену.

lerna exec -- json -I -f ./package.json -e 'this.name = "@reggi/'`node -e 'console.log(path.basename(__dirname))'`'"' 

Проблема заключается в том, что он называет пакеты именем папки, содержащей весь пакет lerna.

Это делает то же самое. Он снова и снова регистрирует имя родительского пакета lerna.

lerna exec -- echo `node -e 'console.log(path.basename(process.cwd()))'` 

Bash замена не позволяет команду на правой стороне exec бежать в его собственном процессе, она компилируется, прежде чем получить шанс, чтобы запустить его.

Как я могу использовать подстановку в bash и не сохранять вывод аргумента, чтобы позволить runtime обрабатывать новое значение подстановки?

ответ

0

Небольшой скрипт будет гарантировать, что вся ваша работа выполняется в том же процессе:

#!/bin/bash 
WD=`pwd` 
[email protected]/`basename "$WD"` 
json -I -f package.json -e "this.name=\"$PACKAGE\"" 

убедитесь, что это исполняемый файл, и на вашем пути, а затем

lerna exec rename.sh