생선 껍질 기능

5031 단어 functionfishshell

내 PATH에 너무 중복된 경로가 있습니다.



어제 PATH 환경 값을 정리하고 있었습니다.
내 경로에 중복 경로가 너무 많다는 것을 알았습니다.

내 복제된 PATH env.



~> set -S PATH
$PATH: set in global scope, exported, a path variable with 27 elements
$PATH[1]: |/home/myoungjin/.local/share/go/bin|
$PATH[2]: |/home/myoungjin/.local/share/rakudo/share/perl6/site/bin|
$PATH[3]: |/home/myoungjin/.local/share/rakudo/bin|
$PATH[4]: |/home/myoungjin/.rakudo/install/share/perl6/site/bin|
$PATH[5]: |/home/myoungjin/.rakudo/install/bin|
$PATH[6]: |/home/myoungjin/.ghcup/bin|
$PATH[7]: |/home/myoungjin/.local/bin|
$PATH[8]: |/home/myoungjin/perl5/bin|
$PATH[9]: |/home/myoungjin/sbin|
$PATH[10]: |/home/myoungjin/bin|
$PATH[11]: |/home/myoungjin/perl5/bin|
$PATH[12]: |/home/myoungjin/bin|
$PATH[13]: |/home/myoungjin/.local/share/go/bin|
$PATH[14]: |/home/myoungjin/.local/share/rakudo/share/perl6/site/bin|
$PATH[15]: |/home/myoungjin/.local/share/rakudo/bin|
$PATH[16]: |/home/myoungjin/.rakudo/install/share/perl6/site/bin|
$PATH[17]: |/home/myoungjin/.rakudo/install/bin|
$PATH[18]: |/home/myoungjin/.ghcup/bin|
$PATH[19]: |/home/myoungjin/.local/bin|
$PATH[20]: |/home/myoungjin/perl5/bin|
$PATH[21]: |/home/myoungjin/sbin|
$PATH[22]: |/home/myoungjin/bin|
$PATH[23]: |/usr/local/bin|
$PATH[24]: |/usr/bin|
$PATH[25]: |/usr/bin/site_perl|
$PATH[26]: |/usr/bin/vendor_perl|
$PATH[27]: |/usr/bin/core_perl|

코드 블록 만들기 시작(함수)



그래서 새 PATH에 내 앱에 대한 새 경로를 추가했을 때 이미 존재 가능성을 확인하지 않았다는 것을 알았습니다.

확인하는 방법은 수백만 가지가 있습니다. 아마도 유명한 방법
외부 프로그램으로

function elem_ -d 'find first value is in the list of rest values'
    # note: fish index start from 1
    for p in $argv[2..-1]; echo $p; end | grep -q $argv[1]
end


그러나 기본을 사용하여 순수한 생선 껍질 스크립트를 사용하는 것은 어떻습니까?
물고기가 제공하는 배열. 그래서 내 첫 번째 시도는 다음과 같았습니다.

function elem -d 'find first value is in the list of rest values'
    set found 0
    for arg in $argv[2..-1]
        if test $found -eq 0 && test $arg = $argv[1]
            set found 1
            break
        end
    end

    if test $found -eq 1
        true
    else
        false
    end
end


~> elem 1 1 2 3
~> echo $status
0


물고기 껍질에 영구적으로 기능 추가



이제 파일 경로가 있는 파일을 만들 수 있습니다.~/.config/fish/functions/elem.fish
사용하고 싶을 때 언제든지 사용할 수 있도록.

이제 확인하는 방법을 만들었습니다. append_to_path 또는 prepend_to_path 기능을 이렇게 만들 수 있습니다.

~/.config/functions/fish/append_to_path.fish



function append_to_path -d 'append given path into PATH environment variable with checking '
    if ! elem $argv[1] $PATH
        set -x --append PATH $argv[1]
    end
end

이제 안전하게 경로를 추가할 수 있습니다.

# middle of ~/.config/fish/config.fish
for p in ~/perl5/bin ~/.local/share/go/bin ~/.ghcup/bin \ 
        ~/.cabal/bin

    append_to_path $p
end


읽어 주셔서 감사합니다!

물고기의 기능에 대해 더 알고 싶다면
내 블로그 게시물을 방문하십시오.
  • Good, So so, Bad about Fish Shell
  • DRY(Do not Repeat Yourself) in fish
  • 좋은 웹페이지 즐겨찾기