다른 쉘 스크립트의 출력으로 표시되는 명령줄 인수를 허용하는 쉘 스크립트가 있습니다. 즉:
myscript1.sh -opt `myscript2.sh`
systemd를 통해 이 스크립트를 시작해야 합니다.
.service 파일에 이 지시문을 추가해 보았습니다.
...
[Service]
...
ExecStart=/bin/bash -c "myscript1.sh -opt `myscript2.sh`"
...
그리고 솔루션은 실제로 작동합니다.
myscript1.sh
내 질문은: 명령을 사용하지 않고 스크립트를 직접 시작할 수 있습니까 /bin/bash
?
답변1
문서부터 시작하세요.man systemd.service
ExecStart=
이 서비스를 시작할 때 실행할 매개변수가 포함된 명령입니다. 값은 아래 설명된 규칙에 따라 0개 이상의 명령줄로 분할됩니다(아래 "명령줄" 섹션 참조).
그런 다음 상호 참조를 따르십시오.
명령줄이 섹션에서는
ExecStart=
[...and other...] 옵션에 대한 명령줄 구문 분석과 변수 및 지정자 대체에 대해 설명합니다.여러 명령줄을 세미콜론으로 구분하여 단일 명령으로 연결할 수 있습니다. 이러한 세미콜론은 별도의 단어로 전달되어야 합니다. 단일 세미콜론은 ";"으로 이스케이프할 수 있습니다.
[…]
이 구문은 쉘 구문에서 영감을 받았습니다., 그러나 다음 단락에 설명된 메타 문자 및 확장만 이해합니다. 변수의 확장은 다릅니다.특히
<
,<<
및>
,>>
사용된 파이프|
, 사용된 데몬 및 기타 셸 구문 요소를 사용한 리디렉션은 지원되지 않습니다.&
ExecStart=
따라서 이 옵션은 셸에 의해 구문 분석되는 것이 아니라 매우 제한된 셸 코드 하위 집합을 구현하는 프로세스에 의해 구문 분석된다는 것이 분명합니다 .
나는 더 간단한 셸과 백틱을 보다 현대적으로 대체하는 코드를 변형하여 사용할 것입니다.
ExecStart=/bin/sh -c 'myscript1.sh -opt $(myscript2.sh)'