#TIL #unix #bash exec builtin command
#!/bin/sh ... export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" exec node_modules/.bin/hubot --name “hubot" "$@"
hubot 실행 스크립트에서 발견했다.
이 셸 내부 명령은 현재의 프로세스를 주어진 명령어로 대치시킵니다. 보통은 셸이 어떤 명령어를 만나면 그 명령어를 실행하기 위해서 자식 프로세스를 포크 시킵니다. 하지만 exec 내장 명령은 포크를 하지 않고 exec 된 그 명령어로 셸 자체를 대치시킵니다. 그러므로 스크립트에서 이 명령어가 쓰이면 exec 된 명령어가 종료할 때 스크립트가 강제로 종료됩니다. 이런 이유로, exec을 스크립트에서 쓰려면 아마도 제일 마지막 명령어로 써야 할 겁니다.
stackoverflow에 올라온 What are the uses of the exec command in shell scripts? 글을 보면 생각보다 여러 시나리오로 사용하는 것 같다. hubot 스크립트에서는 자식 프로세스 포크(fork)를 안 해서 리소스를 절약하려는 의도로 사용한 것 같다.