스크립트에서 Fish Shell 세션의 $PATH를 임시로 설정합니다.

스크립트에서 Fish Shell 세션의 $PATH를 임시로 설정합니다.

$PATH임시 개발 환경을 설정할 수 있도록 변수 앞에 몇 개의 디렉터리를 일시적으로 추가하고 싶습니다 . 다른 Fish 세션에서 보는 내용은 변경하고 싶지 않습니다.

setup-env.fish그래서 나는 올바른 경로를 시작 부분에 추가하여 우선 순위를 갖는 스크립트를 원합니다 $PATH.

내 간단한 테스트는

set -gx tool_dir "/home/jesse/sandbox/tools"
set PATH "$tool_dir/language/bin" $PATH
echo "Evnironment Set up"

나는 이러한 디렉토리가 존재하는지 확인했습니다. 쉘을 열고 스크립트를 실행하면 echo $PATH디렉토리가 표시되지 않습니다.

지속적으로 디렉터리를 추가한 set -U fish_user_paths path $fish_user_paths다음 이를 전역 $PATH변수에 추가하는 방법이 있다는 것을 알고 있습니다. 하지만 나는 이것을 원하지 않습니다. 다른 도구를 사용하려는 경우 시스템 변수를 너무 많이 조정하고 싶지 않습니다. 원한다면 먼저 $PATH쉘을 추가하고 닫고 싶습니다. 나는 Fish 문서 중 일부와 변경 사항에 대한 일부 github 문제를 읽었 $PATH으며 일부 변수가 Fish에 의해 다르게 처리된다는 사실을 수집했습니다. 따라서 여기서 다른 것이 누락되었는지 잘 모르겠습니다.

셸에서 이 명령을 실행하면 작동하지만 스크립트에서 더 많은 작업을 수행하고 싶고 모든 내용을 입력하고 싶지는 않습니다.

XUbuntu 16.04에서 Fish 2.7.1을 사용하고 있습니다.

답변1

생각하다범위는 현재 셸 내에서만 변경할 수 있습니다 fish_user_paths. 이 Fish 세션을 종료해도 이 변수의 일반 값은 영향을 받지 않을 것이라고 생각합니다.

set -g fish_user_paths "$tool_dir/language/bin" $fish_user_paths

답변2

source내가 원하는 방식으로 작동하려면 스크립트를 실행하는 대신 스크립트를 사용해야 했습니다 .

답변3

또 다른 옵션은 물고기 기능을 만드는 것입니다. Fish 쉘의 경우 -x는 하위에 전달되는 임시 변수이고, -l은 하위에 전달되지 않는 임시 변수입니다. 기능을 전환하려는 경우. vim을 사용하여 다음과 같이 함수를 작성하세요.

funced -e vi name_of_function

function name_of_function
   set -x PATH /home/username/some_path  $PATH
end

funcsave name_of_function

이제 대체 경로를 활성화하려면 name_of_function을 입력하세요.

현재 터미널의 하위 터미널이 아닌 다른 터미널을 열 경우, name_of_function을 다시 실행하지 않는 이상 임시 값을 사용하지 않습니다.

아니면 파일을 만들 수도 있어요

#!/usr/bin/fish
set -x PATH /home/username/some_path $PATH

그리고 할

source ~/file_name

관련 정보