Ответ 1
Вы получаете ошибку синтаксического анализа JSON, потому что вы пытаетесь проанализировать строку
"[object Object]"
Вы должны изменить свой bash script, чтобы иметь:
node -e "console.log(JSON.parse(\`$str\`)['name'])"
Обратите внимание на обратные кавычки! Ваша строка является многострочной строкой.
Здесь выполняется (в одном из моих каталогов проектов):
$ str=`cat package.json`
$ prop="name"
$ myval="$(node -e "console.log(JSON.parse(\`$str\`)['$prop'])")"
$ echo $myval
plainscript
ДОПОЛНЕНИЕ
В ответ на OP, желающий использовать require
вместо повторения содержимого файла в строку, решение может быть следующим:
$ prop="name"
$ my_val="$(node -e "console.log(require('./package.json')['$prop'])")"
$ echo $my_val
plainscript
ДОБАВЛЕНИЕ 2
Вы даже можете оставить console.log
, если используете -p
:
$ prop="name"
$ my_val="$(node -pe "require('./package.json')['$prop']")"
$ echo $my_val
plainscript