파이프의 두 번째 명령에 대해 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
'programing' 카테고리의 다른 글
가상 속성 @enterAnimation을 찾았습니다.응용 프로그램에 "Browser Animations Module" 또는 "Noop Animations Module"을 포함하십시오.각도 4 (0) | 2023.04.24 |
---|---|
루비로 XLS 및 XLSX(MS Excel) 파일을 해석하시겠습니까? (0) | 2023.04.24 |
Xcode 6.x.x에 "부적격 디바이스" 섹션이 표시되었습니다. (0) | 2023.04.24 |
ASP의 숨겨진 기능그물 (0) | 2023.04.24 |
git 서브모듈의 리모트 저장소를 변경하는 방법 (0) | 2023.04.24 |