물고기의 $ PATH 변수에서 경로를 제거하는 방법은 무엇입니까? /usr/lib/x86_64-linux-gnu/libfm to

나는 데비안에서 쉘로 피쉬를 사용하고 있으며 명령 완료를 사용하려고 할 때마다 최근 (업그레이드 후) :

set: No such file or directory
set: Could not add component /usr/lib/x86_64-linux-gnu/libfm to PATH.
set: No such file or directory

이것을 실행 :

echo $PATH

나에게 이것을 준다 :

/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games

내 시스템에는가 없으므로 /usr/lib/x86_64-linux-gnu/libfm물고기가 왜 불평하는지 이해하지만 $PATH변수 에서이 경로를 제거하는 방법을 찾을 수 없습니다 .

아무도 내가 어떻게 할 수 있는지 알고 있습니까?



답변

$ PATH 변수를 설정하는 ‘물고기’방법은 실제로를 사용하는 것 set --universal fish_user_paths $fish_user_paths /new/path/here입니다. 그런 다음 새 세션이 시작될 때 $ fish_user_paths가 실제로 $ PATH 변수 앞에 추가됩니다. $ PATH 설명서 에는 현재 삭제 방법이 나와 있지 않습니다.

물고기에서 모든 변수는 실제로 목록 (배열)이며 인덱스 / 인디언을 사용하여 각 항목에 직접 편리하게 액세스 할 수 있습니다. echo $fish_user_paths목록에있는 모든 항목의 공백으로 구분 된 버전을 인쇄하고, 변환 기능을 사용하여 공백을 개행 echo $fish_user_paths | tr " " "\n"한 다음 number lines 기능을 사용하여 행 번호를 지정합니다 echo $fish_user_paths | tr " " "\n" | nl. 그런 다음로 삭제하십시오 set --erase --universal fish_user_paths[5]. --universal새 세션에서 사용해야 합니다.

누군가 시간이 있다면, 이 예제와 함께 repo에 PR을 제출하십시오 . 나는 여기 에 문제를 열었다 .

tldr;

  1. echo $fish_user_paths | tr " " "\n" | nl // 삭제하고자하는 번호 (예 : 5 번째 번호)를 얻습니다.
  2. set --erase --universal fish_user_paths[5] // 다섯 번째 경로를 보편적으로 삭제하여 새로운 세션에서 지속

답변

엘리야가 말한 것처럼 모범 사례는 fish_user_paths전역 이 아닌 수정하는 것 PATH입니다. 다시 Google에 접속하지 않으려면 …

  1. 수정 만하는 몇 가지 함수 만들기fish_user_paths
  2. 두 기능 모두 자동 로딩

사용자 경로에 추가하려면

function addpaths
    contains -- $argv $fish_user_paths
       or set -U fish_user_paths $fish_user_paths $argv
    echo "Updated PATH: $PATH"
end

사용자 경로를 제거하기 위해 존재하는 경우 (부분적인 신용 ) :

function removepath
    if set -l index (contains -i $argv[1] $PATH)
        set --erase --universal fish_user_paths[$index]
        echo "Updated PATH: $PATH"
    else
        echo "$argv[1] not found in PATH: $PATH"
    end
end

그리고 물론, 자동로드되도록하려면 :

funcsave addpaths; funcsave removepath

사용법 예 :

> addpaths /etc /usr/libexec
Modifying PATH: /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin

> removepath /usr/libexec
Modifying PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/local/bin /usr/bin /bin /usr/sbin /sbin

답변

마지막 경로에서 경로 6을 지워야합니다.

set -e PATH[6..-1]

-e 플래그가 지워집니다. 참조하십시오 help set.