Balıklarda $ PATH değişkeninden bir yol nasıl kaldırılır?


20

Ben komut tamamlama kullanmaya çalıştığımda Debian ve son zamanlarda (bazı yükseltme sonra) benim kabuk olarak balık kullanıyorum:

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

Bunu çalıştırıyorum:

echo $PATH 

Bana bunu verir:

/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games

Sistemimde yok /usr/lib/x86_64-linux-gnu/libfm, bu yüzden balıkların neden şikayet ettiğini anlıyorum, ancak bu yolu $PATHdeğişkenimden nasıl kaldıracağımı bulamıyorum .

Bunu nasıl yapabileceğimi bilen var mı?


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

Yanıtlar:


33

$ PATH değişkenini ayarlamanın 'balık' yolu aslında kullanmaktır set --universal fish_user_paths $fish_user_paths /new/path/here. Daha sonra yeni bir oturum başladığında $ fish_user_paths aslında $ PATH değişkenine eklenir. $ PATH belgeleri şu anda size nasıl silineceğini söylemiyor.

Balıklarda her değişken aslında bir listedir (dizi) ve her öğeye doğrudan bir indeks / indeks kullanarak kolayca erişebilirsiniz. echo $fish_user_pathslistedeki her öğenin boşlukla ayrılmış bir sürümünü basar, çevirme işlevi ile boşlukları yeni satır yapar echo $fish_user_paths | tr " " "\n"ve sonra sayı satırları işleviyle üzerine satır numaraları koyar echo $fish_user_paths | tr " " "\n" | nl,. Sonra ile silin set --erase --universal fish_user_paths[5]. Kullanmanız gerekir --universal, aksi takdirde yeni oturumlarda çalışmaz.

Birinin zamanı varsa, lütfen bu örnekle repoya bir PR gönderin . Burada bir sorun açtım .

TLDR;

  1. echo $fish_user_paths | tr " " "\n" | nl // silmek istediğiniz kişinin numarasını alın, örneğin 5.
  2. set --erase --universal fish_user_paths[5] // 5. yolu evrensel olarak silin, böylece yeni oturumlarda devam eder

Bu neden bu kadar gizemli? Bu, bir yapı özelliği olmamalı ve belgelerin Google'a eklenip buraya gelmemesi için eklenmelidir mi? Oh iyi ..
Pär Nils Amsen

Bence @ clozach'ın cevabını burada alırsak, adduser () ve removepath () işlevi olan superuser.com/a/1212305/30982 ve bir PR açarsanız, eklenmesi için ilk adım bu olur. Muhafızların çoğu çalışmak için oldukça iyi, biri bana huysuz görünüyor, ama genel olarak iyi bir şansımız olacağını düşünüyorum. Bu bir sonraki adımımız.
Elijah Lynn

9

Elijah'ın dediği gibi, en iyi uygulama fish_user_pathsküreselden ziyade değişiklik yapmaktır PATH. Bunu bir daha Google'da kullanmak zorunda kalmamak için…

  1. Yalnızca değiştiren birkaç işlev oluşturunfish_user_paths
  2. Her iki işlevi de otomatik yükleme yapın

Kullanıcı yollarına eklemek için:

function addpaths
    contains -- $argv $fish_user_paths
       or set -U fish_user_paths $fish_user_paths $argv
    echo "Updated PATH: $PATH"
end

Bir kullanıcı yolunu kaldırmak için varsa (kısmi kredi bu ):

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

Ve elbette, onları otomatik yükleme yapmak için :

funcsave addpaths; funcsave removepath

Örnek Kullanım:

> 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

Not: Bu yaklaşımın başka bir mekanizma yoluyla eklenen bir yolu kaldırmayacağını keşfettim; Yeni bir terminal oturumu her açtığınızda geri gelen bir yol bulursanız, bazı nokta dosyası temizlemeleri yapılabilir.
clozach

Bu harika, sadece benim yerel eklendi!
Elijah Lynn

3

Bu, son yoldaki 6 yolları silmelidir:

set -e PATH[6..-1]

-E bayrağı silinir. Bkz help set.


Bu sadece şu anki oturum için çalışacak
Daniel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.