시스템 인수에 하이픈 사용

시스템 인수에 하이픈 사용

인수, 하이픈 및다른 지정자슬래시로 대체됩니다.

일부 유닛 이름은 파일 시스템 네임스페이스에 존재하는 경로를 반영합니다. 예: 장치 유닛 dev-sda.device는 파일 시스템 네임스페이스에 장치 노드 /dev/sda가 있는 장치를 나타냅니다. 이것이 적용되는 경우 경로 이름을 이스케이프하는 특별한 방법이 사용되므로 결과를 파일 이름의 일부로 사용할 수 있습니다. 기본적으로 경로가 주어지면 "/"는 "-"로 대체되고 ASCII 영숫자가 아닌 다른 모든 문자는 C 스타일 "\x2d" 이스케이프로 대체됩니다.

--freedesktop.org

하이픈이 포함된 인수를 전달하려고 했는데 systemd 유닛이 하이픈을 슬래시로 바꾸지 않는다는 것을 알았습니다. 그렇다면 하이픈은 항상 서로 연결되어 있지 않습니까? 아니면 내가 상황을 잘못 해석하고 있는 걸까?

기본적으로 나는 단위에서 실행 중인 실행 파일에 문자열을 전달하는 시스템 단위에 문자열을 전달하고 싶습니다.

예를 들어:

[email protected]실행하려는 유닛 내부에 유닛이 있다고 가정해 보겠습니다 .

/usr/local/bin/my_script param-with-hyphen

다음과 같이 하이픈이 포함된 인수를 다음 유닛에 전달하려고 하면:

$ systemctl start [email protected]

ExecStart=/usr/local/bin/my_script %i

문자열을 로 변환하지 않습니까 param/with/hyphen?

내 테스트에서는 하이픈이 대체되지 않았습니다.

나는 단위를 만들었습니다:/etc/systemd/system/[email protected]

[Unit]
Description=Test arg %i

[Service]
ExecStart=/usr/bin/echo "arg: %i"

그리고 달렸다systemctl start testunit@test-hyphen

결과는 하이픈을 대체하지 않습니다.

$ journalctl -u testunit@test-hyphen
Journal file /var/log/journal/f41c5d772fa24834926605125d59db1b/user-1000@4cc6a20c4391418eb972f65e6ecfafbe-000000000000043c-0005351d59c7b07b.journal is truncated, ignoring file.
-- Logs begin at Fri 2016-06-10 18:15:25 PDT, end at Sat 2016-09-24 23:12:42 PDT
Sep 24 23:12:25 Archon systemd[1]: Started Test arg test-hyphen.
Sep 24 23:12:25 Archon echo[6302]: arg: test-hyphen

답변1

문서를 잘못 읽었습니다.

기본적으로 경로가 지정되면 "/"는 "-"로 대체됩니다.

파일 시스템 경로의 슬래시는 대시로 바뀌지만 대시가 슬래시로 바뀌는 것에 대해서는 아무 말도 하지 않습니다. 이것이 바로 테스트에서 대시가 그대로 유지되는 이유입니다. 아마도 무슨 일이 일어나고 있을지 모르지만 대시가 파이프라인 아래로 이동하는 \x2d것으로 해석되는 으로 대체되는 것 입니다.-

ASCII 영숫자가 아닌 다른 모든 문자는 C 스타일 "\x2d" 이스케이프로 대체됩니다.

"지정자"에 대한 섹션은 인수가 이스케이프되거나 이스케이프되지 않는 방법을 지시하는 것 외에는 여기에서 많은 관련성이 없는 것 같습니다.

답변2

그만큼문서링크한 테이블에 바로 설명이 있습니다. 이스케이프는 자동으로 취소되지 않지만 구체적으로 요청해야 합니다.

"%i" 인스턴스 이름: 인스턴스화된 유닛의 경우: "@" 문자와 유닛 이름의 접미사 사이의 문자열입니다.
"%I" 이스케이프되지 않은 인스턴스 이름: "%i"와 동일하지만 이스케이프가 취소되었습니다.

%I대신을 사용하면 %i설명에 따라 대시가 하이픈으로 변경된 것을 볼 수 있습니다.

(그 표현은 나에게는 다소 모호합니다. "이스케이프되지 않음"은 값이 이스케이프되지 않았다는 의미로 해석될 수 있지만 여기서는 이스케이프가 취소되었음을 의미합니다.)

관련 정보