티스토리 뷰
개요
Bash
는 오랜 전통을 자랑하는 Linux 환경의 스크립트 인터프리터이다. 하지만 최근의 프로그래밍 언어에 익숙한 사람이라면 전통적인 쉘 스크립트는 어딘지 모르게 불편하다. 근래 가장 핫한 언어인 Node.js
로 쉘 스크립트를 작성할 수 있다는 사실을 알면 흥미로울 것이다. 이번 글에서는 Node.js로 쉘 스크립트를 작성하는 방법을 설명하고자 한다.
패키지 생성 및 초기화
$ md node-sh
$ cd node-sh
$ npm -y init
$ npm install shelljs --save
- node-sh이란 이름의 패키지를 생성한다. 패키지명은 반드시 공백이나 특수문자 없이 소문자로 작성되어야 하며 단어의 연결은 하이픈(
-
)으로 연결한다. - 외부 명령어를 쉽게 실행하기 위해 ShellJS 패키지를 추가로 설치한다.
스크립트 작성
패키지 생성이 완료되었으면 아래와 같이 스크립트를 작성할 index.js
을 작성한다.
#!/usr/bin/env node
const shell = require('shelljs')
shell.cd('~')
if(shell.exec('ls -la').code !== 0) {
shell.echo('Error: command failed')
shell.exit(1)
}
- 스크립트 첫 줄의
#!/usr/bin/env node
은 이 스크립트가 Node.js 인터프리터로 실행되어야 함을 알려준다. - 스크립트 첫 줄을 Shebang이라고 부르는데 Unix/Linux 환경만 지원하고 Windows 환경은 지원하지 않는다.
shell.exit()
는 스크립트를 종료시키는 메써드이다. 인수는 종료 코드(Exit Status)를 의미하는데 0을 전달하면 정상 종료를 의미하며 그 외의 숫자(1~255)는 오류로 인한 종료를 의미한다. [관련 링크]
스크립트 실행
아래와 같이 스크립트를 실행할 수 있다.
### 스크립트에 실행 권한 부여
$ chmod +x index.js
### 스크립트 실행
$ ./index.js
- Windows 환경이라도
Cygwin Bash
또는Git Bash
를 통해 실행이 가능하다. 스크립트 저장시 반드시 개행 형식을 유닉스 방식으로 저장해야 한다. 이를 지키지 않을 경우 : No such file or directory 오류가 발생한다. 이미 작성된 파일의 개행 형식을 유닉스 방식으로 변경하는 방법은 아래와 같다.
$ vi index.js
:set ff=unix
:set nobomb
:wq
파이프 적용
쉘 스크립트이기 때문에 파이프 기능 또한 적용된다. 정렬되지 않은 JSON 문자열을 파이프로 받아 정렬된 문자열을 출력하는 스크립트를 만들어보자.
#!/usr/bin/env node
process.stdin.resume()
process.stdin.setEncoding('utf8')
process.stdin.on('data', function (data) {
process.stdout.write(JSON.stringify(JSON.parse(data), null, 2))
})
- 실행 결과는 아래와 같다.
$ echo '{"a":"1", "b":"2"}' | ./index.js
{
"a": "1",
"b": "2"
}
참고 글
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MySQL
- Eclipse
- node.js
- CentOS
- 알뜰폰
- 로드바이크
- jsp
- kotlin
- graylog
- DynamoDB
- 로드 바이크
- 태그를 입력해 주세요.
- Tomcat
- Spring MVC 3
- JHipster
- Docker
- java
- 구동계
- spring
- JavaScript
- maven
- 자전거
- Kendo UI
- 평속
- jstl
- bootstrap
- Kendo UI Web Grid
- chrome
- jpa
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함