非対話型/非ログインシェル用に呼び出されるrcファイルはありません。たとえば、cronによって実行されるもの
(これは確かにわかりません。コミュニティの専門知識に頼ります)
非対話型シェルでは、BASH_ENV
環境変数を設定する必要があります。これにより、特定のrcファイル(例:BASH_ENV=$HOME/.bash_profile
)に設定できます。
利用できるrcファイルが多すぎるかどうかはわかりません。慣れていないファイルがあるかどうか知りたいです。次の条件を満たすrcファイルを見つけたいと考えています。
特定の質問に対する答えは、多くの場合、/etc/bash.bashrc
(または/etc/bashrc
)のみがロードされるということです。
これに対処するにはいくつかの方法があるようですが、残念ながらほとんどが回避策です。優先順位は特にありません。
ログインは/etc/profile
で実行され、多くの場合、カスタムスクリプトを/etc/profile.d/*.sh
に配置できます。
bashログインでラップします
ログインをトリガーするのが最も簡単な場合があります。
echo "do whatever $PATH $BASH $PS1 $0"
になります
bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'
プロファイルを手動でロードします
ログインが行うことを実行し、プロファイルを手動でロードします
source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"
単純な変数については、/etc/environment
に追加できます。 buntu System-wide_environment_variables を参照してください。ただし、変数の展開は機能しません
THING_HOME="/opt/thing"
PATH="$PATH:/opt/thing" # this will NOT work
PATHの場合、それに追加できます。 Sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment
/etc/bash.bashrc
(または/etc/bashrc
)に追加できますがこれは通常、非対話型の場合は早期に終了するため、前に追加をハックする必要があります。
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
EnvironmentFile
とEnvironment
があります。例: systemctl edit --full cron.service
他の誰かがより良い回避策を持っているかどうか聞いてみたいです!