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


20

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

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변수 에서이 경로를 제거하는 방법을 찾을 수 없습니다 .

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


grep -R /usr/lib/x86_64-linux-gnu/libfm ~/.config/fish /usr/share/fish??
glenn jackman

$ grep -R / usr / lib / x86_64-linux-gnu / libfm ~ / .config / fish / usr / share / fish /home/superuser/.config/fish/fish_history:grep -R / usr / lib / x86_64- linux-gnu / libfm ~ / .config / fish / usr / share / fish
tomekK

답변:


33

$ 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] // 다섯 번째 경로를 보편적으로 삭제하여 새로운 세션에서 지속

왜 이렇게 신비로운가요? 사람들이 Google에 접속하지 않아도되도록 내장 된 기능이 아니고 설명서에 추가되어서는 안됩니까? 잘 ..
Pär Nils Amsen

addpaths () 및 removepath () 함수 인 superuser.com/a/1212305/30982 에서 @clozach의 답변을 가져 와서 PR을 열면 추가하는 것이 첫 번째 단계라고 생각합니다. 대부분의 관리자는 작업하기가 꽤 좋으며, 나에게는 심술 seems은 것처럼 보이지만 전반적으로 우리는 좋은 기회를 가질 것이라고 생각합니다. 이것이 우리의 다음 단계입니다.
Elijah Lynn

9

엘리야가 말한 것처럼 모범 사례는 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

참고 :이 접근 방식이 다른 메커니즘을 통해 추가 된 경로를 제거하지는 않습니다. 새 터미널 세션을 열 때마다 경로가 다시 발견되면 일부 점 파일 정리가 순서대로 이루어질 수 있습니다.
clozach

이것은 훌륭합니다. 방금 내 지역에 추가되었습니다!
엘리야 린

3

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

set -e PATH[6..-1]

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


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