변수는 Fishshell에서 상속됩니다.

변수는 Fishshell에서 상속됩니다.

환경 변수 EDITOR를 설정하고 기본값으로 변경하려고 하는데 이 동작으로 인해 /usr/bin/nano사용할 수 없습니다.set -Ux물고기 FAQ

어떤 설정 물고기가 상속되는지 확인하는 방법은 무엇입니까? (그래서 바꿀 수 있어요)

편집: /etc/environment비어 있음

set -S EDITOR
$EDITOR: set in global scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nano|
$EDITOR: set in universal scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nvim|
$EDITOR: originally inherited as |/usr/bin/nano|

답변1

fish에서는 버전 3.6.0부터 물어볼 수 set --show variable있으며 원래 fish가 물려받은 가치가 무엇인지 알려줍니다. 예를 들어:

> set --show foo
$foo: set in global scope, exported, with 1 elements
$foo[1]: |banana|
$foo: originally inherited as |bar|

이는 Fish가 시작될 때 상위 프로세스에서 얻은 값인지, 아니면 Fish가 내부적으로 변경했는지 여부를 결정하는 데 도움이 됩니다.

문제가 단지 나노 항목을 열기 위해 편집기를 여는 것이라면 실제로 편집기를 설정하는 것이 아무것도 없으며 기본적으로 "nano", "vim", "emacs", "joe" 목록을 보는 것이 전적으로 가능합니다. 등을 눌러 첫 번째 게임을 엽니다. 이 경우 set --show EDITOR아무 것도 표시되지 않습니다.

또는 상속받았고 /etc/bashrc 또는 /etc/profile에 설정되었습니다. 배포판은 일반적으로 여기에 기본값을 설정합니다. 그냥 grep -r EDITOR /etc아무거나 보여주세요.


상속된 $EDITOR가 있고 /etc/에서 찾을 수 없는 경우 수행할 수 있는 몇 가지 작업이 있지만 운영 체제에 크게 의존하고 이식성이 없습니다. Fish는 상위 프로세스가 아니므로 상위 프로세스 목록을 확인해야 합니다.

예를 들어 Linux에는 /proc/ 파일 시스템이 있으며 NUL로 구분된 "var=val" 필드가 포함된 /proc/$pid/environ에서 프로세스의 환경을 찾을 수 있습니다.

그래서 당신은 할 수 있습니다

  1. 프로세스의 상위 프로세스 PID를 가져옵니다.
  2. 부모님의 환경을 살펴보세요
  3. 1로 이동

상위 프로세스의 pid가 0이 될 때까지 이는 상위 프로세스가 없음을 의미합니다(이것은 pid 1로 초기화됩니다).

간단한 스케치로:

# Start with fish's pid
set -l ppid $fish_pid
# Get the parent pid - ps' output format is fairly terrible and unportable
while set -l ppid (ps -o ppid -p $ppid | string trim)[2]
      and test "$ppid" -gt 0
    # print the pid and the matching environ value
    echo $ppid (sudo grep -z foo /proc/$ppid/environ | string split0)
end

다음과 같은 출력을 얻을 수 있습니다.

1305 foo=bar
759
9
8
7
1

이는 pid가 "1305"인 프로세스가 "foo"에 대해 "bar" 값을 갖는 반면 상위 프로세스는 해당 환경에서 해당 값을 갖지 않음을 의미합니다. 이 예에서는 프로세스 759에서 변수( export foo=bar)를 설정했지만 상속된 값이기 때문에 환경에 변수가 없습니다.

따라서 대부분의 경우 설정 과정은 다음과 같습니다.뒤쪽에상속된 가치를 지닌 마지막 것.

ps다음을 통해 프로세스에 대해 문의 할 수 있습니다 ps -p 759(필요한 경우 PID를 입력하세요).

  PID TTY          TIME CMD
  759 pts/0    00:00:00 bash

따라서 이 경우 하나의 bash 프로세스가 변수를 설정하고 다른 bash 프로세스(1305)가 이를 상속합니다.

관련 정보