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
最も簡単な答えは、これをPATH
systemdユニットファイルのコマンドの一部に設定することです。ExecStart
たとえば、現在
ExecStart=/bin/mycmd arg1 arg2
次に、次のように変更します。
ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'
拡張は$PATH
systemdではなく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 はプログラムを実行するために新しいシェルを起動しません。これはユーザーが望むものでもそうでないかもしれません。