피쉬 쉘에서 하나의 명령에 대해서만 환경 변수를 설정하려면 어떻게해야합니까?


49

bash에서는 할 수 있습니다 EDITOR=vim crontab -e. 생선 껍질에서도 비슷한 효과를 얻을 수 있습니까?

답변:


27
begin; set -lx EDITOR vim; crontab -e; end

2
더 쉬운 방법이 있습니까?
Milovan Zogovic 8

이상하게도 이것은 저에게 효과적이지 않습니다. 루비 스크립트를 호출하고 있으며 ENV가 설정 한 변수를 선택하지 않습니다.set -lx date '12/04/2012'
Duke

@ 듀크 : 그것은 나를 위해 작동합니다. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson

10
한편이 물고기의 질문에 답하고있다 : fishshell.com/docs/current/faq.html#faq-single-env

2
그리고 그 FAQ는 다음과 같습니다.env SOME_VAR=1 command
BallpointBen

72

왜 이것이 작동하지 않아야하는지 알지 마십시오 env EDITOR=vim crontab -e
. 쉘을 완전히 우회합니다.


3
이것은 훨씬 쉽습니다. 유일한 문제는 껍질을 우회하면 근육 기억에 잠겨있는 맞춤형 물고기 명령을 허용하지 않는다는 것입니다.
JohnMetta

나는 문서에서도 그것을 보았지만 왜 다음과 같이 작동하지 않습니까? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant

신경 쓰지
마라

10

그것은 문서 에서 나온 것입니다

SOME_VAR=1 command produces an error: Unknown command "SOME_VAR=1".

env 명령을 사용하십시오.

env SOME_VAR=1 command

또한 블록에서 지역 변수를 선언 할 수 있으며 쉘을 우회하지 않습니다

begin
  set -lx SOME_VAR 1
  command
end

2

be함수 의 정의에 따라 실패 할 수 있습니다

begin
  set -lx RAILS_ENV staging
  be rails r "p ENV['RAILS_ENV']"
end

그것이 작동하려면 :

function be --description 'Runs bundle exec' --no-scope-shadowing
  bundle exec $argv
end

--no-scope-shadowing 옵션에 대한 설명을 참조하십시오

-S 또는 --no-scope-shadowing을 사용하면 함수가 호출 함수의 변수에 액세스 할 수 있습니다. 일반적으로, 호출 함수의 변수와 이름이 같은 함수 내부의 모든 변수는 "그림자"이며 그 내용은 호출 함수와 무관합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.