dtach에 환경 변수를 전달하는 방법은 무엇입니까? [복사]

dtach에 환경 변수를 전달하는 방법은 무엇입니까? [복사]

환경 변수를 넣는 방법에 대한 아이디어가 있습니까 dtach? 기본적으로 상속되지는 않는 것 같습니다 ...

FOO=bar && dtach -c /tmp/a-socket env
# env does not include $FOO

[편집하다]

이유(TM) 때문에 거기에 일종의 명령 구분 기호가 필요합니다. 하나 또는 &&.

(이제 이것이 dtach 특정 문제가 아니라는 것을 깨달았습니다. 단지 쉘에 대한 나의 부족한 이해를 반영하는 것뿐입니다...)

답변1

실제로 export는 필요하지 않습니다. export의미는 다음과 같습니다

각 이름은 이후에 실행되는 명령 환경으로 자동 내보내기 위해 표시됩니다. VALUE가 제공되면 내보내기 전에 VALUE를 할당하세요.

다음 명령 스키마를 사용하여 환경 변수를 노출할 수 있습니다.

FOO=bar dtach -c /tmp/a-socket env

그것은 발생하지 않습니다부작용다음 하위 프로세스(및 실행된 명령)는 FOO=bar환경 변수를 상속합니다.

첫 번째 실행 시도에 대해 의견을 보내주세요. &&환경 변수 구성과 프로세스 실행 사이에 연산자를 추가하는 것은 의미가 없습니다. 아무것도 실행하지 않고(종료 코드 == 0) 환경 변수 없이 명령을 실행합니다.

답변2

귀하의 예에서는 &&명령 구분 기호 역할을 합니다(구체적으로 첫 번째 명령이 성공하면 두 번째 명령만 실행됩니다). 이는 원하는 것이 아닐 수도 있습니다. 다음 예를 고려하십시오.

name=value;$command
name=value||$command
name=value&&$command

세 가지 경우 모두 이름은 현재 셸의 값으로 설정됩니다. 첫 번째와 세 번째 경우에는 할당이 절대 실패하지 않기 때문에 $command 명령이 실행됩니다. 할당은 절대 실패하지 않습니다(예약된 변수가 있는 이상한 쉘에서는 예외가 발생할 수 있음). 어떤 상황에서도 변수가 $command에 전달되지 않습니다.

name=value;export name;$command
export name=value;$command

다른 명령 구분 기호를 생략하는 유사한 예에서는 $command에 변수를 전달하는 내보내기와 그 이후 현재 세션에서 실행되는 다른 모든 명령을 추가합니다.

name=value $command

누락된 명령 구분 기호를 확인하세요. 이 경우 변수는 $command에 전달되며 명령에만 전달되며 현재 쉘에서는 사용되지 않습니다.

답변3

죄송합니다. 내 질문에 답해 드리자면, &&또는 ;명령 구분 기호가 꼭 있어야 한다면 다음을 사용하는 것 외에는 선택의 여지가 없습니다 export.

export FOO=bar; dtach -c /tmp/a-socket env
# this time env will show FOO=bar

; unset FOO메인 쉘을 오염시키고 싶지 않다면 다음을 추가할 수 있습니다.

관련 정보