1

binすべての UNIX のすべてのシェル (実際には複数のシェル) で機能するように、アプリケーションが独自のディレクトリをパスに追加するようにしたいと考えています。これは可能ですか?

具体的に~/.myapp/bin/は、ユーザーのパスの一部を追加することが目標です。

単に追加export PATH=~/.myapp/bin:$PATHするだけでは機能し.bashrcません。zsh ユーザーなどはどうでしょうか? また、シェルがサポートするすべてのプラットフォームでこれが信頼できるかどうかもわかりません。

4

4 に答える 4

3

あなたが求めていることは不可能だと思います。すべてのシェルが尊重する中心的な場所はありません。多くのボーンスタイルのシェル(bash、zsh)は~/.profile、デフォルトの構成に応じて読み取る場合と読み取らない場合がありますが、cshとtcshはまったく異なるファイルのセットを読み取り、bashと同じコマンドを使用して.などの変数を設定しませんPATH

多くのアプリケーションが使用する代替戦略は、/ usr / local / appname /または/opt/ appname /のような場所に自分自身をインストールしてから、でシンボリックリンクを作成すること/usr/local/bin/です。たとえば、私のFreeBSDシステムでは:

> cd /usr/local/bin ; ls -l drush mailq perl5
lrwxr-xr-x  1 root  wheel  14 Apr 29 12:22 drush -> ../drush/drush
lrwxr-xr-x  1 root  wheel  32 Apr 28 15:28 mailq -> ../../../usr/local/sbin/sendmail
lrwxr-xr-x  1 root  wheel  25 Apr 17 01:17 perl5 -> /usr/local/bin/perl5.12.4

カスタムを要求するのではなく、既存の構成を活用するためにできることはすべて、失敗の可能性を減らします。

また、ほとんどのプラットフォームには、物事を処理するための「受け入れられた」方法があります。ソフトウェアをFreeBSDにインストールする場合、それは実際にはFreeBSDの「ports」システムを介して実行する必要があります。このシステムには、ファイルの移動先に関する独自のルールがあります。MacPorts、Fink、Emergeなどと同じです。さまざまなユーザーコミュニティで足を踏み入れる前に、ターゲットプラットフォームをよく読んでください。

于 2012-07-20T03:59:22.590 に答える
2

正直なところ、私はこれを避けるでしょう。symlink または exec スクリプトを入れて、まだそこにない場合~/binは追加する必要があることをユーザーに通知します。$PATH

于 2012-07-20T03:51:48.163 に答える
0

私のシステムでは、 bash と zsh source の両方で、ディレクトリの内容から/etc/profile.env生成されたファイルです。しかし、ここのようにパスを追加するのはおそらく良い考えではありません。これもディストリビューション固有です (シェルがそれを使用する唯一の理由はコードです)env-update/etc/env.d~/smth

if [ -e /etc/profile.env ] ; then
    . /etc/profile.env
fi

と の両方/etc/profile/etc/zsh/zprofile)。

于 2012-07-20T04:35:34.350 に答える
-1

Bashでは、変数$PATHはすべてのフォルダーbinsbinフォルダーを。で区切って提供し:ます。

少し置き換えるだけで、それらのリストを作成できます。たとえば、ユキヒョウについて:

$ echo ${PATH//:/ }
/opt/local/bin /opt/local/sbin /sw/bin /sw/sbin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/git/bin /usr/X11/bin /usr/X11R6/bin
于 2012-07-20T03:59:48.130 に答える