programing

파이프의 두 번째 명령에 대해 Bash에서 명령을 수행하기 전에 환경 변수를 설정하는 것이 작동하지 않습니다.

lovejava 2023. 4. 24. 21:04

파이프의 두 번째 명령에 대해 Bash에서 명령을 수행하기 전에 환경 변수를 설정하는 것이 작동하지 않습니다.

특정 셸에서는 보통 변수를 설정하고 명령을 실행합니다.최근에 명령어에 변수 정의를 추가하는 개념에 대해 배웠습니다.

FOO=bar somecommand someargs

★★★★★★★★★★★★。★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★LC_*variable(명령어에 영향을 주는 것처럼 보이지만 인수에는 영향을 주지 않습니다).[a-z]ranges) char ranges)로 설정합니다.

FOO=bar somecommand someargs | somecommand2  # somecommand2 is unaware of FOO

에 command2를 붙일 수 .FOO=bar중복이 에는 [a-z]를 참조해 주세요.

그렇다면, 이것을 한 줄에서 하는 좋은 방법은 무엇일까요?

나는 다음과 같이 생각하고 있다.

FOO=bar (somecommand someargs | somecommand2)  # Doesn't actually work

나 좋은 대답 많이 받았어!원라이너로 이며, '원라이너'를 사용하지 않는 것이 좋습니다.export Bash의 부모 에서는 Bash가 사용되었습니다.export★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★파이프가 아닌 리다이렉션을 사용하는 방법도 흥미롭다.

FOO=bar bash -c 'somecommand someargs | somecommand2'

변수를 내보내고 하위 쉘 내부에서만 내보내는 것은 어떻습니까?

(export FOO=bar && somecommand someargs | somecommand2)

Keith의 요점은 명령어를 무조건 실행하려면 다음과 같습니다.

(export FOO=bar; somecommand someargs | somecommand2)

env.

를 들어, 「」라고 하는 것은,env FOO=BAR command되지 않는 경우는 .하시기 바랍니다.command실행이 종료됩니다.

「」를 는, 「」를 주의해 주세요. ★★★★★★★★★★★★☆$FOO같은 명령줄에서 명시적으로 셸 인터프리터가 실행되기 전에 대체를 실행하지 않도록 이 명령줄을 이스케이프해야 할 수 있습니다.env.

$ export FOO=BAR
$ env FOO=FUBAR bash -c 'echo $FOO'
FUBAR
$ echo $FOO
BAR

이 경우에도 하실 수 있습니다.eval:

FOO=bar eval 'somecommand someargs | somecommand2'

에는 '이렇게'가 때문에eval모든 사람을 만족시키는 것은 아닌 것 같습니다.명확히 말씀드리지만, 글씨로 쓰여져 있는 경우, 작은 따옴표와 함께 사용하면 완벽하게 안전합니다.외부 프로세스(허용된 응답과 같은)를 기동하지 않고, 추가 서브셸(다른 응답과 같은)로 명령어를 실행하지 않기 때문에 좋습니다.

몇 가지 규칙적인 뷰를 얻을 수 있기 때문에, 아마도 다른 대안을 제시해 주는 것이 좋을 것입니다.eval모든 사람을 기쁘게 하고, 이 단시간에 얻을 수 있는 모든 메리트를 얻을 수 있습니다.eval'꼼수'그냥 기능만 써!모든 명령을 사용하여 함수를 정의합니다.

mypipe() {
    somecommand someargs | somecommand2
}

다음과 같은 환경변수로 실행할 수 있습니다.

FOO=bar mypipe

간단한 접근법은 다음과 같은 기능을 활용하는 것입니다.;

예를 들어 다음과 같습니다.

ENV=prod; ansible-playbook -i inventories/$ENV --extra-vars "env=$ENV"  deauthorize_users.yml --check

command1; command2는 command1 실행 후 command2를 순차적으로 실행합니다.명령어가 성공했는지 여부는 중요하지 않습니다.

셸 스크립트 사용:

#!/bin/bash
# myscript
FOO=bar
somecommand someargs | somecommand2

> ./myscript

언급URL : https://stackoverflow.com/questions/10856129/setting-an-environment-variable-before-a-command-in-bash-is-not-working-for-the