물고기의 $PATH 변수에서 경로를 제거하는 방법은 무엇입니까?

물고기의 $PATH 변수에서 경로를 제거하는 방법은 무엇입니까?

나는 Debian에서 fish를 쉘로 사용하고 있으며 최근에 (업그레이드 후) 명령 완성을 사용하려고 할 때마다 다음과 같은 결과를 얻었습니다.

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/libfmfish가 불평하는 이유를 이해하지만 내 $PATH변수에서 이 경로를 제거하는 방법을 찾을 수 없습니다.

내가 어떻게 할 수 있는지 아는 사람 있나요?

답변1

$PATH 변수를 설정하는 '물고기' 방식은 실제로 set --universal fish_user_paths $fish_user_paths /new/path/here. 그런 다음 새 세션이 시작될 때 $fish_user_paths가 실제로 $PATH 변수 앞에 추가됩니다. $PATH선적 서류 비치하지만 현재는 삭제 방법을 알려주지 않습니다.

Fish에서는 모든 변수가 실제로 목록(배열)이며 인덱스/인덱스를 사용하여 각 항목에 직접 편리하게 액세스할 수 있습니다. echo $fish_user_paths목록에 있는 모든 항목의 공백으로 구분된 버전을 인쇄하고 번역 기능을 사용하여 공백을 개행으로 만든 echo $fish_user_paths | tr " " "\n"다음 숫자 행 함수를 사용하여 줄 번호를 입력합니다 echo $fish_user_paths | tr " " "\n" | nl. 그런 다음 으로 삭제하십시오 set --erase --universal fish_user_paths[5]. 사용해야 합니다 --universal. 그렇지 않으면 새 세션에서 작동하지 않습니다.

누군가 시간이 있다면 PR을 제출해 주세요.레포이 예를 들어요. 이슈를 열었습니다여기.

tldr;

  1. echo $fish_user_paths | tr " " "\n" | nl// 삭제하려는 항목의 번호를 가져옵니다(예: 5번째 항목).
  2. set --erase --universal fish_user_paths[5]// 5번째 경로를 전체적으로 지워 새 세션에서도 유지되도록 합니다.

답변2

Elijah가 말했듯이 가장 좋은 방법은 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

답변3

이렇게 하면 마지막 경로에서 경로 6이 지워집니다.

set -e PATH[6..-1]

-e 플래그는 삭제입니다. 보다 help set.

답변4

초기화fish_user_paths더 이상 원하지 않는 경로 없이:

 $ set -U fish_user_paths /usr/local/bin /usr/bin /bin /usr/local/games /usr/game

더 많은 정보:https://fishshell.com/docs/current/tutorial.html#tut_path

관련 정보