システムデバイスのPATH設定

システムデバイスのPATH設定

CentOS 7で非ログインシェルのPATHを設定するには?

特に/usr/local/texlive/2016/bin/x86_64-linux

/etc/environmentに設定しようとしましたが、PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH私のPATHはです/usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin

/etc/profile.d/texlive.shそれを使って作成しましたが、export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"ログインシェルでのみ機能します。

私が探していますすべてのユーザーのパス設定(ログインおよび非ログインシェル)しかし、解決策は上記で試みられた。

私が探していますDebian のすべてのユーザーの非ログインシェルとログインシェルのシステム $PATH パスを追加する方法しかし、受け入れられる解決策はなく、/etc/login.defs更新時に変更される可能性があるため、修正する必要があるかどうかわかりません。

答え1

最も簡単な答えは、これをPATHsystemdユニットファイルのコマンドの一部に設定することです。ExecStartたとえば、現在

ExecStart=/bin/mycmd arg1 arg2

次に、次のように変更します。

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

拡張は$PATHsystemdではなくbashによって行われます。 systemdが拡張されていないため、使用などの代替はEnvironment=PATH=/new/path:$PATH機能しません$PATH

答え2

Environment=EnvironmentFile=またはを使用しない限り、使用する必要がPassEnvironment=ありますExecSearchPath=

man systemd.execについて話すExecSearchPath=:

検索する Exec*= (ExecStart=、ExecStop= など) プロパティで使用される実行可能ファイルに関連付けられた絶対パスのコロンで区切られたリスト。ユーザーがEnvironment =、EnvironmentFile =、またはPassEnvironment =を介して$ PATHを提供しない場合、ExecSearchPath =は$ PATHを上書きします。空の文字列を割り当てると以前の割り当てが削除され、ExecSearchPath =を値に複数回設定すると以前の設定に追加されます。

答え3

envプログラムが正常に使用されました(systemdは設定ファイルを介して変更できません)。

ExecStart=/usr/bin/env PATH=/usr/bin:/path1:/path2 mycmd arg1 arg2

env はプログラムを実行するために新しいシェルを起動しません。これはユーザーが望むものでもそうでないかもしれません。

関連情報