[Bug] .mam.env 를 bash(source)와 Python 로더가 다르게 해석 — KEY= value 한 줄에 delegate-job 래퍼가 즉시 종료 #26

Closed
opened 2026-09-14 14:42:04 +00:00 by Godopu · 1 comment
Owner

증상

.mam.env 1행이 AGENT_SESSIONS_YAML= .mam/agent-sessions.yaml(= 뒤 공백)일 때:

  • Python 쪽(mqtt_common.py:96-106 _parse_env_file)은 값을 strip 해서 .mam/agent-sessions.yaml 로 정상 처리한다.
  • delegate-job 래퍼는 이 파일을 bash 로 source 한다(multi-agent-mux-delegate-job:21-32, TARGET_ENV). bash 는 이 줄을 "빈 AGENT_SESSIONS_YAML 을 붙여 .mam/agent-sessions.yaml 을 명령으로 실행"으로 해석한다.
    • 결과: .mam.env: line 1: .mam/agent-sessions.yaml: Permission denied 후 래퍼가 즉시 종료(--help 도 출력되지 않음).
    • YAML 파일에 실행 권한이 있었다면 실제로 실행됐을 것이다.

같은 설정 파일을 두 로더가 다른 문법으로 읽기 때문에, 한쪽에서 정상인 설정이 다른 쪽에서 치명적이다. source 는 .mam.env 안의 $(...) 등 임의 셸도 실행한다.

제안

  1. 래퍼도 source 대신 Python 로더와 같은 규칙의 KEY=VALUE 파서로 읽는다(주석·빈 줄 무시, 따옴표 제거, 값 앞뒤 공백 제거, 셸 해석 없음).
  2. 최소한 로드 전에 각 행을 ^[A-Za-z_][A-Za-z0-9_]*= 형식으로 검증하고, 어긋나는 행은 경고 후 건너뛴다.
  3. .mam.env.example 에 형식 규칙(= 앞뒤 공백 금지, 셸 문법 미지원)을 명시한다.

환경 정보

  • main 1134d74 (v4.6.0), 2026-09-14 Linux 호스트에서 관측
## 증상 `.mam.env` 1행이 `AGENT_SESSIONS_YAML= .mam/agent-sessions.yaml`(`=` 뒤 공백)일 때: - Python 쪽(`mqtt_common.py:96-106` `_parse_env_file`)은 값을 strip 해서 `.mam/agent-sessions.yaml` 로 정상 처리한다. - delegate-job 래퍼는 이 파일을 bash 로 `source` 한다(`multi-agent-mux-delegate-job:21-32`, `TARGET_ENV`). bash 는 이 줄을 "빈 `AGENT_SESSIONS_YAML` 을 붙여 `.mam/agent-sessions.yaml` 을 **명령으로 실행**"으로 해석한다. - 결과: `.mam.env: line 1: .mam/agent-sessions.yaml: Permission denied` 후 래퍼가 즉시 종료(`--help` 도 출력되지 않음). - YAML 파일에 실행 권한이 있었다면 실제로 실행됐을 것이다. 같은 설정 파일을 두 로더가 다른 문법으로 읽기 때문에, 한쪽에서 정상인 설정이 다른 쪽에서 치명적이다. `source` 는 `.mam.env` 안의 `$(...)` 등 임의 셸도 실행한다. ## 제안 1. 래퍼도 `source` 대신 Python 로더와 같은 규칙의 `KEY=VALUE` 파서로 읽는다(주석·빈 줄 무시, 따옴표 제거, 값 앞뒤 공백 제거, 셸 해석 없음). 2. 최소한 로드 전에 각 행을 `^[A-Za-z_][A-Za-z0-9_]*=` 형식으로 검증하고, 어긋나는 행은 경고 후 건너뛴다. 3. `.mam.env.example` 에 형식 규칙(`=` 앞뒤 공백 금지, 셸 문법 미지원)을 명시한다. ## 환경 정보 - main `1134d74` (v4.6.0), 2026-09-14 Linux 호스트에서 관측
Author
Owner

PR #43 병합(v4.8.1, 0051fd6)으로 닫힙니다. .mam.env 는 이제 lib_py/delegation/envfile.py 한 곳이 읽습니다(셸 해석 없음, 환경변수 우선, 형식이 어긋난 줄·export·NUL·bash 자체 변수는 줄 번호 경고 후 건너뜀, 존재하지만 읽을 수 없는 파일은 래퍼·Python 모두 오류). 이슈의 재현(KEY= value 로 래퍼 즉시 종료, 값 속 $(...) 실행)은 실제 래퍼로 수정 전후를 확인했습니다. 셸이 env 파일을 source 하던 곳은 이슈 작업 지시의 "세 곳"이 아니라 delegate-job 래퍼 한 곳이었습니다. 리뷰 경과와 후속 목록은 PR #43 코멘트에 있습니다.

PR #43 병합(v4.8.1, 0051fd6)으로 닫힙니다. `.mam.env` 는 이제 `lib_py/delegation/envfile.py` 한 곳이 읽습니다(셸 해석 없음, 환경변수 우선, 형식이 어긋난 줄·`export`·NUL·bash 자체 변수는 줄 번호 경고 후 건너뜀, 존재하지만 읽을 수 없는 파일은 래퍼·Python 모두 오류). 이슈의 재현(`KEY= value` 로 래퍼 즉시 종료, 값 속 `$(...)` 실행)은 실제 래퍼로 수정 전후를 확인했습니다. 셸이 env 파일을 `source` 하던 곳은 이슈 작업 지시의 "세 곳"이 아니라 delegate-job 래퍼 한 곳이었습니다. 리뷰 경과와 후속 목록은 PR #43 코멘트에 있습니다.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tmpl/multi-agent-mux#26