何年ぶりだ?
ちょっと楽しいかも(*^_^*
標準ではシェルがsh、ksh、cshしか入っていないのでbashをインストール。
# pkg_add bashその他もいつも通り、
# pkg_add screenとかやって各種ツールをインストール。
# pkg_add rsync
# pkg_add lynx
# pkg_add wget
# pkg_add gnupg
# pkg_add bunzip
# pkg_add bzip2
# pkg_add perl
# pkg_add zip
# pkg_add unzip
# pkg_add sudo
で、.bashrc書いて・・・ログアウトして、再度ログイン。
$ historyありゃ?ヒストリー保存されてない!?
→ .bash_historyの所有者がrootになってました(@_@
で、色々.bashrcに追加してたのですが、どうも.bashrcが読まれてない・・・気がする。
ktraceでチェック
$ ktrace -t n bash
bash$ exit
exit
$ kdump -f ktrace.out
1491 1 ktrace NAMI "/home/gyao/bin/bash"
1491 1 ktrace NAMI "/bin/bash"
1491 1 ktrace NAMI "/sbin/bash"
1491 1 ktrace NAMI "/usr/bin/bash"
1491 1 ktrace NAMI "/usr/sbin/bash"
1491 1 ktrace NAMI "/usr/X11R6/bin/bash"
1491 1 ktrace NAMI "/usr/pkg/bin/bash"
1491 1 ktrace NAMI "/usr/libexec/ld.elf_so"
1491 1 bash NAMI "/etc/ld.so.conf"
1491 1 bash NAMI "/usr/pkg/lib/libtermcap.so.0"
1491 1 bash NAMI "/usr/lib/libtermcap.so.0"
1491 1 bash NAMI "/usr/pkg/lib/libintl.so.0"
1491 1 bash NAMI "/usr/lib/libintl.so.0"
1491 1 bash NAMI "/usr/pkg/lib/libc.so.12"
1491 1 bash NAMI "/usr/lib/libc.so.12"
1491 1 bash NAMI "/dev/tty"
1491 1 bash NAMI "/etc/nsswitch.conf"
1491 1 bash NAMI "/etc/nsswitch.conf"
1491 1 bash NAMI "/usr/pkg/lib/nss_compat.so.0"
1491 1 bash NAMI "/usr/lib/nss_compat.so.0"
1491 1 bash NAMI "/usr/pkg/lib/nss_nis.so.0"
1491 1 bash NAMI "/usr/lib/nss_nis.so.0"
1491 1 bash NAMI "/usr/pkg/lib/nss_files.so.0"
1491 1 bash NAMI "/usr/lib/nss_files.so.0"
1491 1 bash NAMI "/usr/pkg/lib/nss_dns.so.0"
1491 1 bash NAMI "/usr/lib/nss_dns.so.0"
1491 1 bash NAMI "/etc/pwd.db"
1491 1 bash NAMI "/etc/pwd.db"
1491 1 bash NAMI "/etc/nsswitch.conf"
1491 1 bash NAMI "/home/gyao"
1491 1 bash NAMI "."
1491 1 bash NAMI "."
1491 1 bash NAMI "/home/gyao/bin/bash"
1491 1 bash NAMI "/bin/bash"
1491 1 bash NAMI "/sbin/bash"
1491 1 bash NAMI "/usr/bin/bash"
1491 1 bash NAMI "/usr/sbin/bash"
1491 1 bash NAMI "/usr/X11R6/bin/bash"
1491 1 bash NAMI "/usr/pkg/bin/bash"
1491 1 bash NAMI "/usr/pkg/bin/bash"
1491 1 bash NAMI "/home/gyao/.bashrc" ← 読み込まれてる
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/var/mail/gyao"
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/etc/localtime"
1491 1 bash NAMI "/etc/localtime"
1491 1 bash NAMI "/home/gyao/.termcap.db"
1491 1 bash NAMI "/home/gyao/.termcap.db"
1491 1 bash NAMI "/home/gyao/.termcap"
1491 1 bash NAMI "/usr/share/misc/termcap.db"
1491 1 bash NAMI "/usr/share/misc/termcap.db"
1491 1 bash NAMI "/home/gyao/.inputrc"
1491 1 bash NAMI "/etc/inputrc"
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/home/gyao/.bash_history"
1491 1 bash NAMI "/home/gyao/.bash_history"
$
実際に実行されてる?って調べると
ログインシェル → .bashrcが読み込まれない
シェル上からbashを起動 → .bashrcが読み込まれる
なんでだろうか?と調べたが、結局bashのman pageで解決した
できればbashの時だけ限定にしたいという事からbash が対話的なログインシェルとして起動されるか、 --login オプション付きの非対話的シェルとして起動されると、 /etc/profile ファイルが存在すれば、 bash はまずここからコマンドを読み込んで実行します。 このファイルを読んだ後、 bash は ~/.bash_profile, ~/.bash_login, ~/.profile をこの 順番で探します。 bash は、この中で最初に見つかり、かつ読み込みが可能であるファイルから コマンドを読み込んで実行します。 --noprofile オプションを使ってシェルを起動すれば、 この動作を行わないようにできます。
.profile → sh使うときも読み込まれるので、NG
残り、.bash_profileか.bash_loginということになる。別にどっちでもイイので、.bash_profileを採用。
$ cp .bashrc .bash_profileで希望通りの動作に。
でも、今までの環境ってどうなってたの??という疑問があったので見てみた。
$ cat .bash_profileしっかり、.bsdh_profile使ってました!しかも、.bashrcが読み込まれるようになってました。。。で、そんなことはすっかり忘れて.bashrcだけ触ってた・・・と。
#!/bin/sh
if [ -f ~/.bashrc ]; then
. ~/.bashrc
elif [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
結局、、、bashのmanページに続きがあって、、
bash は、自分を起動したのがリモートシェルデーモン (通常は rshd) かどうかを調べます。 rshd によって実行されていると bash が判断した場合、 ~/.bashrc が存在し、かつ読み込み可能であれば、 bash はコマンドをこのファイルから読み込んで実行します。 sh として呼び出された場合には、この動作は行いません。 --norc オプションを使えばこの動作を禁止できますし、 --rcfile オプションを使えば他のファイルを読ませるようにもできます。 しかし一般的には rshd は これらのオプションを付けてシェルを起動しませんし、 指定もできないようになっています。
とかいう記述もあったので、結局元の環境と同じにしました。触る必要のあるファイルが2つになるとまた混乱するので。(シンボリックリンク張って・・・も考えたけど)
まだまだ色々カスタマイズしないと・・・
コメント