魚の起動時に$ PATHに./binディレクトリ(現在のシェルディレクトリからの相対パス)を追加したい。 fish
はシェルであることに注意してください。
echo $PATH
set PATH ./bin $PATH
echo $PATH
これらの行を~/.config/fish/config.fish
シェルは同じパスのコレクションをエコーします。絶対パスが適切に追加されます。
シェルを開いて同じset PATH ./bin $PATH
bin
を含むディレクトリ内に追加されました。ただし、現在のディレクトリ内にbin
がない場合、エラーが表示されます。
set: Could not add component ./bin to PATH.
set: Value too large to be stored in data type
OS X Lionで魚1.23.1を実行しています。
fish
が存在しないディレクトリパスをPATHに追加しないようです。これは相対パスにも当てはまります。ただし、ホームディレクトリにbin
ディレクトリを作成した場合set PATH ./bin $PATH
は自宅から実行されるため、起動時に正しく機能します。しかし、これは一種のハックです。
$PATH
へのパスを永続的に追加するために私が見つけた最良の方法は、
set -U fish_user_paths $fish_user_paths ~/path/name
これはが$PATH
の前に追加します。また、永続的であるため、パスはシェルの再起動時に$PATH
のままになります。
config.fish
にコマンドを入力して$PATH
を変更するよりも効率的です。これは、シェルを再起動するたびに実行する場合に比べて1回しか実行されないためです。
変数 fish_user_paths
はユーザーが設定することを目的としています1、 ridiculousfish が述べているように、魚の管理者。
便宜上、fish関数を作成することを検討してください。 2
# ~/.config/fish/functions/add_to_path.fish
function add_to_path --description 'Persistently prepends paths to your PATH'
set --universal fish_user_paths $fish_user_paths $argv
end
そしてそれを次のように使用します:
$ add_to_path foo bar # Adds foo/ and bar/ to your PATH
ノート
そのページで、著者は例set -U fish_user_paths ~/bin
を示します。これにより、fish_user_paths
が単一の値~/bin
で上書きされます。 fish_user_paths
に設定されている既存のパスが失われないようにするには、追加する新しいパスに加えて、必ず$fish_user_paths
を含めてください(私の回答にあります)。
私のドットファイルには、重複の追加をスキップする少し高度なバージョンが含まれています https://github.com/dideler/dotfiles/blob/master/.config/fish/functions/add_to_user_path.fish
これまでfish
について聞いたことがありません。インストールしてみたので、試してみることができました(そして、fish
がシェルであることに気付く前に、ここで書いたいくつかの段落を削除しました)。
set PATH dir-name $PATH
は、$PATH
の前にディレクトリを追加するための正しい構文です。
しかし、relativeディレクトリ名を$PATH
に追加することはほぼ間違いなく悪い考えであり、シェルがディレクトリが存在しないときに警告することであなたに好意を示しています。 (fish
はユーザーフレンドリーになるように設計されています。)
代わりに絶対パスを使用してください:
set PATH $PWD/bin $PATH
最初に$PWD/bin
が存在するかどうかを確認し、存在しない場合はエラーメッセージを出力します。
「set: Value too large to be stored in data type
」メッセージについては、ディレクトリを$PATH
に複数回追加していただけませんか?追加する前に、ディレクトリがすでに$PATH
にあるかどうかを確認する方法がいくつかあります。
その答えは、set -U
を使用することは、赤ニシンだと思います。代わりに、以下を~/.config/fish/config.fish
に追加します。
if status --is-interactive
set PATH $PATH ~/.local/bin;
end
direnv http://direnv.net/ は、あなたがやっていることを手助けする優れたユーティリティです。
共有ディレクトリへの書き込みアクセス権を持つユーザーは誰でも、たとえば。 ./bin/ls。このコードは、共有ディレクトリでlsを実行すると実行されます。
direnvはこの問題を解決しません(.envrcファイルに基づいて機能しますが、誰でも配置できます)が、少なくとも、ディレクトリにcdすると、$ PATHが変更されていることがわかります。
$ cd my_project
direnv: loading .envrc
direnv export: ~PATH