非ログインシェルの呼び出しファイルとして、/ etcディレクトリにdashとshがありますか?

非ログインシェルの呼び出しファイルとして、/ etcディレクトリにdashとshがありますか?

/etc/profilesh対話型dashログインモード内で呼び出すことができます。/etc対話型の非ログインモードでディレクトリに呼び出す必要があるファイルはありますか?

答え1

シェルdashsh実装されている場合)は、ログインシェルで始まると読み込まれますdash/etc/profileそれからそれを読んでください~/.profile。このファイルは環境変数を~/.profile設定してエクスポートできます。ENVこの変数には、非ログインシェルから取得したファイルへのパスを保持する必要があります。これは一般的に/etc

dashマニュアルで(私の強調):

ENV対話型シェルに入ったときに環境変数が設定されている.profile場合、またはログインシェルに設定されている場合、シェルは次に名前付きファイルからコマンドを読み込みますENVしたがって、ユーザーはログイン時にのみ実行されるコマンドと、各.profile 対話型シェルに対して実行されるコマンドをこのファイルに配置する必要がありますENV 変数を特定のファイルに設定するには、ホームディレクトリにENV次の行を入力します。.profile

ENV=$HOME/.shinit; export ENV

.shinit必要なファイル名に変更してください。

他のシェルまたはプロセスでログインではなく対話型シェルセッションを呼び出すか作成するときに、適切なshシェル初期化ファイルに設定されていることを確認してください。これは、Bourneタイプのシェルで次のように行うことができます。dashENV

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などを変更することもできます。

関連情報