한 줄의 스크립트를 사용하여 JSON 파일에서 키 값을 읽는 매우 간단한 bash
함수를 작성하려고 합니다 . node
현재 시행 중인 사항은 다음과 같습니다 utils.bash
.
#!/bin/bash
project_name() {
echo $(node -e "require('../package.json').name;")
}
예, JSON 데이터에 더 직접적으로 액세스할 수 있는 도구가 있다는 것을 알고 있지만 모든 개발 팀이 이미 해당 도구를 갖추고 있으므로 node
이는 새로운 종속성이 아니라 기존 종속성입니다.
파일을 실행 가능하게 만들었지만 source scripts/utils.bash
(명령줄에서) 다음과 같이 함수를 참조하려고 하면 다음과 같습니다.
PROJECT_NAME=project_name
출력은 내가 입력한 줄입니다. 간단히 실행하려고 하면 오류가 project_name
발생합니다 .node
Error: Cannot find module '../package.json'
스크립트 utils.bash
는 프로젝트 scripts
폴더 에 있고 package.json
파일은 상위 폴더에 있습니다. 나는 상위 폴더에서 이 작업을 수행합니다(이것이 중요하지 않기를 바라지만). 가져오기를 시도했지만 './package.json'
오류가 발생했습니다.
내가 원하는 최종 결과는 name
여러 스크립트를 통해 키 값을 참조할 수 있게 되는 것입니다.project.json
bash
어떻게 해야 하나요?
답변1
글쎄, 문제 PROJECT_NAME=project_name
는 그래야 한다는 것이다 PROJECT_NAME="$(project_name)"
. 이 경우에는 할당 내에 있으므로 따옴표가 필요하지 않습니다.스칼라변수가 될 수 있지만 다른 많은 상황(예:echo $(...)
), 따옴표를 생략한다는 것은 결과를 $IFS
문자로 분할하고 결과 단어에 와일드카드를 수행하는 것을 의미합니다(원하지 않음).
함수는 실행 중인 것과 동일한 작업 디렉터리를 갖고 있으며 현재 위치에 있다고 말합니다 scripts
. 따라서 함수는 ./../package.json
not 을 찾고 있습니다 ./scripts/../package.json
.
./package.json
따라서 ( 현재 작업 디렉토리 대신 기본 검색 경로를 찾는 package.json
no 없는 경로 /
와 는 달리) 오류가 발생하는 이유를 알아내는 것이 좋습니다 .node
node
또한 를 사용 console.log()
하고 값을 출력 해야 합니다.echo
의미없는 내용 삭제$(...)
(특히 $(...)
위에 표시된 것처럼 인용되지 않은 항목). 그래서:
package_name() {
node -e "console.log(require('./package.json').name)"
}
PACKAGE_NAME="$(package_name)" || handle error from node if any