나는 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/libfm
fish가 불평하는 이유를 이해하지만 내 $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;
echo $fish_user_paths | tr " " "\n" | nl
// 삭제하려는 항목의 번호를 가져옵니다(예: 5번째 항목).set --erase --universal fish_user_paths[5]
// 5번째 경로를 전체적으로 지워 새 세션에서도 유지되도록 합니다.
답변2
Elijah가 말했듯이 가장 좋은 방법은 fish_user_paths
전역보다는 수정하는 것입니다 PATH
. 다시는 Google에 접속하지 않으려면…
- 다음과 같은 몇 가지 기능을 만듭니다.수정만
fish_user_paths
- 두 가지 기능을 모두 수행자동 로딩
사용자 경로에 추가하려면:
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