파일의 환경 변수와 함께 env 사용

파일의 환경 변수와 함께 env 사용

e다음 내용이 포함된 파일(이름이 지정됨)이 있다고 가정해 보겠습니다 .

a=3
b="5 6"

각각을 별도의 매개변수로 해석하려면 어떻게 해야 합니까 env? 즉, 다음과 동일해집니다.

$ env a=3 b="5 6" ruby​​ -e 'p ENV["a"] p ENV["b"]'
"삼"
"5 6"
$ env a=3 "b=5 6" ruby​​ -e 'p ENV["a"] p ENV["b"]'
"삼"
"5 6"

이것은 분명히 공간상의 이유로 작동하지 않습니다.

env $(cat e) ruby -e 'p ENV["a"]; p ENV["b"]'

하지만 이것도 마찬가지입니다:

IFS=$'\n' env $(cat e) ruby -e 'p ENV["a"]; p ENV["b"]'

인용하면 다음과 $(cat e)같은 결과가 발생합니다.

"1\nb=2 3"

답변1

이는 작업에 적합한 도구를 사용하지 않은 예입니다. env환경 변수를 설정한 다음 다른 프로그램을 체인로드하는 유일한 도구는 아닙니다. 그리고 파일에서 변수 데이터를 읽지 않습니다.

물론 .aka source명령도 작업에 적합한 도구는 아닙니다.

  1. 파일에 실수로 쉘 명령이 포함될 수 있습니다.밖의간단한 변수 할당은 경우에 따라(구성 파일이 무엇인지에 따라) 큰 보안 허점이 될 수 있습니다.
  2. 질문의 예에 있는 일련의 작업은 , .set에서 제공됩니다.껍데기변수, 아니환경변하기 쉬운. 자동으로 내보내지지 않습니다.

올바른 도구는 이러한 유형의 여러 도구 세트에 포함된 일반적인 체인 로딩 도구입니다.

그 중 하나는 read-conf출신이다.Nosh 도구 세트, 이러한 구성 파일(예:/etc/rc.conf-말하자면 - PC-BSD) 및 환경 변수 설정아니요구성 구현 및 공개데이터전체 쉘 언어 구문에 대한 파일:

jdebp% 이름 없음
리눅스
jdebp % 디렉토리 e
a=3
b="5 6"
jdebp % read-conf e printenv | jdebp % read-conf e printenv |
사용자=jdebp
a=3
b=5 6
제드 BP%
jdebp% 이름 없음
FreeBSD
jdebp % 읽기-conf /etc/rc.conf printenv | jdebp % 읽기-conf /etc/rc.conf 헤더 -n 2
cron_enable=아니요
sendmail_msp_queue_enable=아니요
제드 BP%

또 다른 도구는 Wayne Marshall의 도구입니다.runenv범죄자로부터.

답변2

여기서는 필요하지도 않습니다 env. Bourne과 유사한 쉘에서(파일의 sh구문이 예제와 유사하다고 가정):

(set -a; . ./e && ruby -e 'p ENV["a"]; p ENV["b"]')

( set -a향후의 모든 변수 할당을 환경으로 내보냅니다.)

다음과 같이 할 수도 있습니다.

cat e - << 'EOF' | paste -sd ' ' - | sh
ruby -e 'p ENV["a"]; p ENV["b"]'
EOF

즉, e파일의 모든 줄과 Ruby 명령줄을 연결하여 sh해석을 위한 하나의 긴 명령줄을 만듭니다(여전히 e파일의 sh구문이 큰따옴표가 제안하는 것과 같다고 가정). 할당이 단일 라인이라고 가정합니다.

관련 정보