bash에서 exec가 실행하는 명령에 매개변수를 전달하는 방법은 무엇입니까?

bash에서 exec가 실행하는 명령에 매개변수를 전달하는 방법은 무엇입니까?

Bash 스크립트에서 고유한 프로세스 이름을 가진 하위 프로세스를 시작하려고 합니다. 이것은 작동합니다:

bash -c "exec -a MyUniqueProcessName './start_service' &"

하지만 내 문제는 다음 start_service과 같은 작업을 수행하면 매개변수를 .

bash -c "exec -a MyUniqueProcessName './start_service param' &"

또는

bash -c "exec -a MyUniqueProcessName './start_service $myvar' &"

그럼 실패했다고 불평해라

/start_service param: No such file or directory

내가 뭘 잘못했나요?

답변1

exec유틸리티와 해당 매개변수를 다음과 같이 생각하세요.분리논쟁:

bash -c "exec -a MyUniqueProcessName './start_service' 'param1' 'param2' 'etc.' &"

OpenBSD에서 테스트됨:

$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
1898 hello 5
$ bash -c 'exec -a hello sleep 5 &' && ps -a | grep hello
18164 p1  Sp       0:00.01 hello 5 (sleep)
26417 p1  R+/0     0:00.01 grep hello

Ubuntu에서 동일한 테스트(몇 가지 콜백을 받았지만 sleep쿼리할 때 얻었습니다 hello. 괜찮을 것입니다. Linux는 이상한 것들이 혼합되어 있습니다):

$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
2849889 sleep

-f여기에 추가 사항을 참고하세요 ps.

$ bash -c 'exec -a hello sleep 5 &' && ps -af | grep hello
myself  2851359       1  0 17:41 pts/0    00:00:00 hello 5
myself  2851361 2848295  0 17:41 pts/0    00:00:00 grep hello

관련 정보