ログインではなく対話型シェルから正しい起動スクリプトを取得する方法

ログインではなく対話型シェルから正しい起動スクリプトを取得する方法

私はOpenSolaris派生バージョン(Illumos / OpenIndianaディストリビューションであるOmniOS)で通常の/使用可能な環境を設定しようとしています。システム全体で使用するために.profile、.inputrc、および.bashrcファイルに必要なすべてのパイプコードがありますが、非ログインシェル用のシステム全体のスクリプトはありません。 Bashはユーザーの.bashrcファイルをsuにロードしようとしますが、$ HOME(およびその他の環境変数)は以前のユーザーが構成したままになります。

直接(SSH)ログインの出力:

login as: myuser
Using keyboard-interactive authentication.
Password:
/etc/profile run
myuser's .bashrc run
myuser's .profile run
myuser@Helios:~$ echo ~
/home/myuser
myuser@Helios:~$

出力切り替えユーザー:

root@Helios:/etc# su myuser
bash: /root/.bashrc: Permission denied
bash-4.2$ id
uid=1001(myuser) gid=100(users) groups=100(users),27(sudo)
bash-4.2$ echo ~
/root
bash-4.2$

myuserの.bashrcの代わりにルートの.bashrcを取得することに特別な注意を払ってください。

su(追加パラメータなし)は常にUbuntu、Fedoraなどでシームレスに動作し、この経験を再現しようとしています。しかし、システム全体のスクリプトが実行されず、ユーザーのスクリプトが見つからない場合はどうすればよいですか?私はOmniOSバージョンのbashおよび/またはsuが何か落ちたと非難する傾向がありますが、正確に正しい動作は何ですか? $ HOMEやその他の環境変数の更新失敗を修正するために追加のパイプを設定/アクセス/作成できる場所はありますか?

さらなる説明:

  • OmniOS には man bash がありません (少なくとも MANPATH=/opt/omni/share/man:/opt/mysql55/man:/opt/gcc-4.4.4/man:/usr/gnu/share/man を使用しない: /usr/local/man:/usr/local/share/man:/usr/man:/usr/share/man)
  • /etc/bashrc と /etc/bash.bashrc はソースが提供されていません(これは明らかにディストリビューションルールなので、予想されますが、Ubuntu は .bashrc を参照せずにこれらのファイルをロードするようです)。

ベストアンサー1

これsuHOMEこのコマンドはSolarisで環境変数を変更しません。これがうまくいく方法です。 Linuxおよび* BSDではsuリセットが行われますHOME。これがBSD/SysVの違いだと思います。 Bashは完全に正常に動作します。ロードしようとしますが、まだだから~/.bashrcです。HOME/root/root/.bashrc

アイデアは、suroot権限を取得したときに実行するシェルや他のプログラムがまだホームディレクトリ内の設定ファイルを見つけることです。ターゲットユーザーの環境が必要な場合は、実行できますsu -

設定したいがHOME環境を変更せずに維持するには、明示的に設定してください。

HOME=~myuser su myuser

Bashがシステム全体のファイルをロードするかどうかは、コンパイル時オプションです。このオプションはUbuntuでは有効ですが、OmniOSでは無効になっています。

おすすめ記事