ログインシェルは最初に読み取り/etc/profile
、次に~/.bash_profile
。
非ログインシェルは/etc/bash.bashrc
、から読み取り、それからを読み取ります~/.bashrc
。
なぜそれが重要なのですか?
次の行のためman ssh
:
コマンドが指定されている場合、ログインシェルの代わりにリモートホストで実行されます。
言い換えると、sshコマンドにオプションのみ(コマンドではない)がある場合、次のようになります。
ssh user@host
ログインシェルが起動し、ログインシェルはを読み取ります~/.bash_profile
。
持っていないのsshコマンドのコマンドを、のように:
ssh user@host :
コマンドがある場所:
(または何もしない)。
それはなりませんので、ログインシェルを起動~/.bashrc
読まされるものです。
リモート標準
リモートコンピュータの/ dev / stdinに提供されているtty接続は、実際のttyまたは他の何かである可能性があります。
ために:
$ ssh sorontar@localhost
/etc/profile sourced
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
$ ls -la /proc/self/fd/0
lrwx------ 1 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3
開始されたbashがそれを見ると、TTY(ネットワーク接続ではない)で終了します。
コマンドを使用したssh接続の場合:
$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
TTYのリストは同じものから始まりますが、/ etc / profileがソースされていないことに注意してください。
$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
これは、接続がパイプ(ネットワーク接続ではない)であることをシェルに伝えます。
そのため、両方のテストケースで、シェルは接続がネットワークからのものであることを認識できないため、読み取り~/.bashrc
を行いません(ネットワークへの接続についてのみ話す場合)。〜/ .bashrcを読み取りますが、理由は異なります。