私は魚をDebianのシェルとして使用していますが、最近(いくつかのアップグレードの後)コマンド補完を使用しようとするたびに、
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
がないので、魚が不満を言う理由はわかりますが、$PATH
変数からこのパスを削除する方法がわかりません。
誰か私がこれを行う方法を知っていますか?
$ PATH変数を設定する「魚」の方法は、実際にset --universal fish_user_paths $fish_user_paths /new/path/here
を使用することです。その後、新しいセッションが開始すると、$ fish_user_pathsが$ PATH変数に実際に付加されます。 $ PATH documentation は、現在のところそれを削除する方法を教えていません。
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
を使用する必要があります。そうしないと、新しいセッションでは機能しません。
時間があれば、この例を使って repo にPRを送信してください。私は問題をオープンしました ここ 。
tldr;
echo $fish_user_paths | tr " " "\n" | nl
//削除する番号を取得します。例:五番目set --erase --universal fish_user_paths[5]
// 5番目のパスを完全に消去して、新しいセッションで永続化する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
ユーザーパスを削除するには存在する場合(- this)への部分的なクレジット ):
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
そしてもちろん、それらを作成するには autoloading :
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
これにより、パス6から最後のパスが消去されます。
set -e PATH[6..-1]
-eフラグは消去です。見る help set
。
不要なパスを指定せずにリセット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