私は 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変数を設定する「fish」の方法は、実際に を使用することですset --universal fish_user_paths $fish_user_paths /new/path/here
。その後、新しいセッションが開始されると、$fish_user_pathsが実際に$PATH変数の先頭に追加されます。$PATHドキュメンテーションただし、削除方法は現在のところ説明されていません。
fish では、すべての変数は実際にはリスト (配列) であり、インデックス/インデックスを使用して各項目に直接アクセスできます。 は、echo $fish_user_paths
リスト内のすべての項目のスペース区切りバージョンを出力し、 translate 関数を使用してスペースを改行してecho $fish_user_paths | tr " " "\n"
から、 numberlines 関数を使用して行番号を付けますecho $fish_user_paths | tr " " "\n" | nl
。 次に、 を使用して削除しますset --erase --universal fish_user_paths[5]
。 を使用する必要があります。--universal
そうしないと、新しいセッションでは機能しません。
もし時間があるなら、PRを投稿してください。レポこの例で、私は問題を提起しましたここ。
要約:
echo $fish_user_paths | tr " " "\n" | nl
// 削除したいものの番号を取得します。例: 5 番目set --erase --universal fish_user_paths[5]
// 5番目のパスを普遍的に消去し、新しいセッションでも保持されるようにします
答え2
fish_user_paths
Elijah が言うように、ベストプラクティスはグローバル ではなくを変更することです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
リセット魚のユーザーパス不要になったパスなし:
$ 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