환경 변수를 넣는 방법에 대한 아이디어가 있습니까 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
메인 쉘을 오염시키고 싶지 않다면 다음을 추가할 수 있습니다.