Fish EDITOR 환경 변수가 작동하지 않는 것 같습니다.

Fish EDITOR 환경 변수가 작동하지 않는 것 같습니다.

저는 최근 Fish Shell을 사용하기 시작했습니다.

echo $EDITOR반품vim

그런데 에디터를 실행시켜서 EDITOR환경변수에서 찾아보아야 하는 프로그램을 사용하면 아무 것도 나오지 않는 것 같습니다.

사용할 때의 예로서 pass edit(fromhttps://www.passwordstore.org/) 그것은 반환

vi: command not found(env 변수에 아무것도 설정되지 않은 경우 vi를 대체 수단으로 사용합니다 EDITOR)

내가 놓친 게 무엇입니까?

답변1

일부 프로그램은 $VISUAL환경 변수보다 환경 변수를 먼저 찾으 $EDITOR므로 둘 다 설정된 경우 $VISUAL해당 변수가 우선 적용됩니다.

또한 쉘 변수는 쉘 언어의 변수입니다. EDITOR=preferred-editor해당 명령에서 명령을 호출 해야 합니다.환경그들이 그것을 선택하게 해주세요.

쉘은 일부 변수를 환경 변수에 매핑한 다음 이러한 변수를 var=value실행하는 모든 명령에 대한 환경으로 전달할 수 있습니다. rc-like 쉘 에서는 다음과 같이 수행됩니다.모두Bourne과 같은 쉘에서는 쉘 변수가 사용됩니다 export var. 쉘에서는 환경 변수를 설정할 csh수 있습니다 setenv var value. 다음 옵션을 fish사용 합니다 .-xset

> set var value
> echo $var
value
> printenv var
>

$var쉘 변수가 설정되었지만 에 전달 var=value된 환경으로 내보내지지 않았습니다 printenv.

> set -x var value2
> echo $var
value2
> printenv var
value2

이번에는 그것이 수신된 맥락에서 printenv하나를 얻습니다 .var=value2

printenv표준 명령은 아니지만 일반적입니다. env은 표준 명령이므로 시스템에 없는 경우 다음을 printenv시도해 볼 수 있습니다.

env | grep -E '^(VISUAL|EDITOR)='

그러나 변수에 var=<newline>VISUAL=와 같은 값이 있거나 그보다 큰 값이 있으면 LINE_MAX속일 수 있습니다 .

다른 옵션은 다음과 같습니다.

perl -le 'print $ENV{VISUAL}'
python -c 'import os; print(os.getenv("VISUAL"))'

var=value또한 여기의 시나리오는 극히 드물지만 var주어진 환경에 대해 여러 명령을 사용하여 명령을 실행할 수 있습니다.

예를 들어, 다음을 수행할 수 있습니다.

execve("/path/to/cmd", ["cmd", "some arg"], ["VISUAL=vi", "VISUAL=emacs"])

cmd환경 변수가 갖는 것으로 간주되는 값은 VISUAL수신하는 환경 변수 목록을 검색하는 방법에 따라 달라집니다 exceve(). 일부 명령/라이브러리(예: libc's getenv())는 첫 번째 명령을 선택하고 일부 명령/라이브러리는 마지막 명령을 선택합니다. 일부 쉘은 이들 중 하나를 해당 환경 변수에 매핑하지만 다른 하나는 유지하고 추가 실행 시 전달할 수 있습니다.

그래서 당신은 할 수 있고 set -x VISUAL vim, 두 가지 모두로 실행되고 첫 번째 것만 수정하기 때문에 두 번째 것도 제공한다는 것을 printenv알 수 있습니다 .emacsfishVISUAL=viVISUAL=emacsVISUALprintenv

하지만 이를 위해서는 적극적으로 사용자를 속이려고 하는 무언가 또는 누군가가 필요하며 자세히 조사해 보면 fish실제로 환경에서 중복 항목을 제거하는 쉘 중 하나인 것으로 보입니다(있는 경우).

관련 정보