パッケージマネージャーは.bashrcファイルを変更する必要がありますか?


9

適切に実行するために環境変数を設定する必要がある何かのためのパッケージを書いています。パッケージマネージャーのインストール手順でユーザーの環境を変更する必要がありますか、それともユーザーに自分で変更するように促すだけですか?私の直感は後者ですが、私は前者の議論を見ることができます。


7
環境変数への依存を削除して(たとえば、代わりに構成ファイルを使用して)、何かをより良く動作させることができますか?それはハックをパッケージ化したり、いじくったりするよりも望ましい.bashrcと思います。

もちろん、この質問のために、アプリケーションの変更はオプションではないとしましょう。
David Cowden 2014年

1
ユーザーが実行していない場合はどうなりますbashか?多種多様な起動ファイルで利用可能な多くの代替シェルがあります。ここでいくつかの代替ソリューションを見つけることを真剣に勧めます。
ジュール

10
したがって、その周りにラッパーを記述します。たとえば、を参照してくださいtomcat。正しく機能するには、いくつかの環境変数が必要です。これらはすべて、バイナリを直接実行する代わりに実行される起動スクリプトによって設定されます。
ジュール

1
@Vality私は知っています。ジュールの提案はすでに提案されています。私は面白くて-私が最初にシェルにとらわれないソリューションを持っているべきだと主張するために関与する循環ロジックをからかうことはソリューションとしてシェルスクリプトを使用することを提案することに進みます。それは冗談です(;
David Cowden

回答:


18

パッケージマネージャーのインストール手順でユーザーの環境を変更する必要がありますか、それとも単にユーザーに自分で変更するように指示する必要がありますか?

どちらでもない。パッケージインストーラーは、パッケージが所有していないアカウントのホームディレクトリにあるものには決して触れないでください。パッケージは、インストールされている場合でも、ユーザー側で特別な作業をしなくても使用できるように、パッケージ自体を構成する必要があります。(これを実行したくない例外的なケースがありますが、それらはほとんどありません。)

Unixy環境には、ユーザーがログインシェルを起動するたびに読み込まれる設定ファイルを置く場所があります。BourneシェルとCシェルの場合/etc/profile/etc/csh.cshrcそれぞれに構成を挿入できます。(アンインストールするときに忘れずに削除してください。)

多くのシステムは、個々のファイルを使用してこれを実行することもサポートしています。これにより、テキストを1つのファイルの任意の場所にドロップしなくても、構成のビットを簡単に追加および削除できます。(また、パッケージマネージャーから得られるすべての制御と説明責任の利点を提供します。)一部のディストリビューション/etc/profileは、に一致するすべてのファイルを読み取るように構成します/etc/profile.d/*.sh


1
歴史的rcに、スクリプトの名前はCTSSruncom (コマンドの実行)に由来しますが、それ以降、他の意味を含むように範囲が拡大しました。
Jeffrey Hantin、2014年

1
@JeffreyHantin:Touché。削除されました。
Blrfl 2014年

1
ピッキングを続けたくprofile.dないのですが、bashには組み込まれていません。これは、通常(ディストリビューションのベース)から一般的に提供されるフック/etc/profileです。;)
ジェフリーハンティン2014年

1
@JeffreyHantin:私が「Unixy」という言葉を使用したことに対する批判はありませんが、確かにそうです。:-)
Blrfl 2014年

14

それはません決してユーザーの変更する許容可能な/homeその変更は、全体のポイントでない限り、パッケージマネージャから構造を。

これに対する主なアプローチは次のとおりです。

  • 設定する必要があることをユーザーに通知します。
  • デフォルトを指定して、不要にする
  • 値を適切に設定するランチャースクリプトをパッケージ化する
  • (ディストリビューションがサポートしている場合)環境変数をエクスポートするファイルを内にドロップします/etc/profile.d。一部のLinuxシステムでは、このディレクトリ内のすべてのスクリプトはデフォルトのシェルセットアップによって提供されるため、そこで変数を安全に設定できます。

7

質問パッケージマネージャーのインストール手順でユーザーの環境を変更する必要がありますか?

回答いいえ。ユーザーのデータ(この場合は.bashrcファイル)を変更することはお勧めできません。ユーザーのデータはパッケージマネージャーによって神聖であると見なされるべきですか?

質問パッケージマネージャーのインストール手順は、ユーザーに自分で行うように促すだけですか。

回答これははるかに口に合うソリューションですが、まだ理想的ではありません。

必要な環境変数を設定できるラッパーシェルスクリプトを作成し、その後で実行可能ファイルを実行する必要があると思います。


私もこの考えを検討しました。プロジェクトは若く、これが必要ではないところまでたどり着くでしょう。
David Cowden、2014年

@ GlenH7返信を更新しました。うまくいけば、更新された応答があなたが探しているより多くの答えになるでしょう。
R Sahu 2014年

@ GlenH7:この質問は本質的にXY問題です:meta.stackexchange.com/questions/66377/what-is-the-xy-problem、環境変数の必要性が解決すべき真の問題です。
whatsisname 2014年

さらに、ラッパースクリプトを作成するというこの回答の提案は、すべてのシェルで機能する唯一の回答です。
whatsisname 2014年

1
;その実現には、実際に質問(尋ねるために私を促したものです@MattThomason
デヴィッド・コーデン

5

あなたは木の森を失っています。明らかに、ユーザーにとって環境の変更を実行する方が便利ですが、リスクが高く、やや侵襲的です。インストーラーがを変更する必要があるかどうかをユーザーに尋ねることで、両方の利点を組み合わせる.bashrc必要があります。それ以外の場合は、自分でそれを行う方法を指示する必要があります。


アドバイスありがとうございます。私はこれまでに公開パッケージを書いたことがなく、ただタブーしないようにしたいだけです。
David Cowden、2014年

これが、今日のGoogle Cloud SDKによる処理方法です。スタートアップファイルを変更するかどうかを尋ねられます。
jmq 2014年

1

「ユーザー」が単数形であると想定しています。このシステムに何千人ものユーザーがいる場合はどうなりますか?

ユーザーのホームディレクトリさえ見つけることができると想定しています。ユーザーがLDAPなどを介して管理されている場合は、すべての有効なユーザーのリストを取得できない場合もあります。ホームディレクトリが/ homeにない場合があります。それらはネットワークから動的にマウントできます。ユーザーのホームディレクトリが暗号化されていて、ログインしていない間はキーにアクセスできない場合があります。

これをすべての可能な状況で確実に行う方法はありません。ユーザーがシェルにログインまたはスポーンするときに、ディストリビューションのメカニズムを使用してユーザーの環境変数を設定します。それが機能しない場合は、ラッパーを作成します。(ラッパーは、コメントで引数をアドレス指定するために、必要に応じてバイナリにすることできます)。


0

パッケージでグローバル変数を設定することは、それがあなた自身のプロジェクトによって定義されたものである場合に受け入れられます(つまり、プロジェクトの名前は変数の名前の一部です!)。それでも、ユーザーの.bashrcファイルには触れないでください。代わりに、スクリプトを/etc/profile.dに追加する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.