Shell Script에서 Nodejs를 이용하여 JSON 값 가져오기
의도
쉘 스크립트를 이용해 프로그램 설치시 방화벽에 자동으로 포트를 추가하려고 하니 설정 정보는 JSON 파일로 되어 있어 쉘 스크립트만으로 파싱하기는 어려움이 있습니다.
다행히 프로그램이 nodejs
기반으로 돌아가는 어플리케이션이라 쉘 스크립트에서 nodejs
를 이용하여 파싱하고 값을 가져오는 처리를 하였습니다.
※ 다른 방법도 많이 있습니다. awk
나 python
을 이용하여 값을 가져오는 방법도 있으니 구글링해보시길 바랍니다.
입력, 실행 파일
[JSON file]
// default.json { "http": { "port": 9080 }, "websocket": { "port": 9070 }, "peerjs": { "path": "/peerjs", "port": 9000, } }
[Shell script file]
// test.sh # http 포트 정보 가져오기 HTTP_PORT=$(node -pe 'JSON.parse(process.argv[1]).http.port' "$(cat default.json)") # peerjs 포트 정보 가져오기 PEERJS_PORT=$(node -pe 'JSON.parse(process.argv[1]).peerjs.port' "$(cat default.json)") # websocket 포트 정보 가져오기 WEBSOCKET_PORT=$(node -pe 'JSON.parse(process.argv[1]).websocket.port' "$(cat default.json)") echo "HTTP port is $HTTP_PORT" echo "PEERJS port is $PEERJS_PORT" echo "WEBSOCKET port is $WEBSOCKET_PORT" # Output # HTTP port is 9080 # PEERJS port is 9000 # WEBSOCKET port is 9070
실행
// 스크립트에 실행 권한을 추가 > chmod u+x test.sh // 스크립트 실행 > ./test.sh