/etc/profile
sh
対話型dash
ログインモード内で呼び出すことができます。/etc
対話型の非ログインモードでディレクトリに呼び出す必要があるファイルはありますか?
答え1
シェルdash
(sh
実装されている場合)は、ログインシェルで始まると読み込まれますdash
。/etc/profile
それからそれを読んでください~/.profile
。このファイルは環境変数を~/.profile
設定してエクスポートできます。ENV
この変数には、非ログインシェルから取得したファイルへのパスを保持する必要があります。これは一般的に/etc
。
dash
マニュアルで(私の強調):
ENV
対話型シェルに入ったときに環境変数が設定されている.profile
場合、またはログインシェルに設定されている場合、シェルは次に名前付きファイルからコマンドを読み込みますENV
。 したがって、ユーザーはログイン時にのみ実行されるコマンドと、各.profile
対話型シェルに対して実行されるコマンドをこのファイルに配置する必要がありますENV
。 変数を特定のファイルに設定するには、ホームディレクトリにENV
次の行を入力します。.profile
ENV=$HOME/.shinit; export ENV
.shinit
必要なファイル名に変更してください。
他のシェルまたはプロセスでログインではなく対話型シェルセッションを呼び出すか作成するときに、適切なsh
シェル初期化ファイルに設定されていることを確認してください。これは、Bourneタイプのシェルで次のように行うことができます。dash
ENV
ENV="$HOME/.shinit" sh
または
ENV="$HOME/.shinit" dash
答え2
このコマンドのもう1つの点は、どちらも/ bin / sh(通常はUNIX系システムのダッシュシェル)を呼び出しますが、対話型シェルではなくログインシェルとして呼び出すことです。したがって、ENV が指すファイルは実行されず、ハードワイヤードされた /etc/profile および ~/.profile だけが実行されます。
ENVを読むには、シェルコマンドの前に「sh -i -c」を入れ、-cの後にコマンドを引用する必要があるようです。
sh_command = 'sh -i -c "' + command + ' ' + args.join(' ') + '"'
env = { 'ENV' => Your.shellrc_file }
std_out, std_err, status = Open3.capture3(env, sh_command)
これにより、対話型シェルを呼び出すログインシェルのわずかな非効率性が発生しますが、ENVは無視されなくなります。 bashを好む場合は、sh->bash、ksh、zsh、またはFishなどを変更することもできます。