ログインしたユーザーのホームディレクトリのすべてを参照して、/etc/paths.d/にパスを追加します。

ログインしたユーザーのホームディレクトリのすべてを参照して、/etc/paths.d/にパスを追加します。

Postgres.appのウェブサイトでこの素晴らしいトリックを見つけました。

echo /Users/user1/latest/bin | sudo tee /etc/paths.d/postgresapp

知りたいです。どうすればいいですか?どのログインしたユーザーです。私は次のようなものが欲しい

echo {whatever the home directory of the logged in user at runtime}/latest/bin | sudo tee /etc/paths.d/postgresapp

私の最初の考えはその変数を試すことでしたが、$HOME私のhome変数は私のホームディレクトリを指し、すべてのユーザーがMacにログインしてTerminal.appを使用するときにこの変数が機能するようにしたいと思います。

答え1

実験を通して私が知っている限り、これを行うために使用することはできませんが、$HOME他の方法があることが答えです。

HOME現在のユーザーのパスが含まれているので(環境はプロセス固有であることを覚えておいてください)、行を$HOME/latest/bin追加するときにパスを拡張せずにパスを含むファイルを作成するのは当然のことです。 (コマンドラインでecho '$HOME/blah...'一重引用符を使用する場合。)

その後、シェルがこれらのファイルを読み込んでパスを設定したときにそのコンテンツを挿入できるようにしたいと思います。ただし、path-helper使用されているツールが/etc/paths.dドル記号を超えているように見えるため、これは機能しません。

$ cat /etc/paths.d/test 
$HOME/test
$ PATH="" /usr/libexec/path_helper -s
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:\$HOME/test"; export PATH;

したがって、パスに文字通りドル記号が表示されます。


Bashにのみ興味がある場合は、チルダ(~)を代わりに使用できます$HOME。エスケープされず、引用されることがあります。しかし、soPATHでは動作しないため、一般的な解決策ではありません。kshzsh


/etc/profile代わりに(または/etc/zprofile. zsh)ディレクトリを手動で追加できます。

私のシステムでは、/etc/profileこのコードスニペットは以下に指定されたパスを設定しますpath_helper

if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
fi

PATHファイルのどこかに割り当てを追加します。

PATH="$HOME/latest/bin:$PATH"

その行をへの呼び出しの後に置くと、ディレクトリはセクションの先頭にあり、前に置くとpath_helper結果パスの終わりに移動するように見えます。path_helperpath_helper

答え2

echo '$HOME/latest/bin' | sudo tee /etc/paths.d/postgresapp

関連情報