ssh <host> <command>
構文を使用してSSHホストでコマンドを直接実行すると.bashrc
、.bash_profile
(または.profile
)の出力は表示されますが、出力は表示されないことに気づきました。
たとえば、次のコマンドを両方のファイルの先頭に配置すると、
echo ${BASH_SOURCE[0]}
手動でソースします.bash_profile
(.bashrc
順番にソースします)。
$ . .bash_profile
.bash_profile
.bashrc
これは、ssh <host>
コマンドの形式を使用して、SSH経由でこのコンピューターにリモートでログインした場合に表示される出力と同じです。(そして、.bash_profile
一時的に別の場所に格納した場合、これらの行はどちらもエコーされません。)
ただし、のssh <host> <command>
形式でリモートマシンで直接コマンドを実行するとssh
、出力は次のようになります。
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
私の理解では、との違いということである.bash_profile
とは、.bashrc
前者がためであるということであるログインシェル後者はためのものであるインタラクティブ、非ログインシェル。
私は次のように結論しました:
ssh <host>
ソースのみ.bash_profile
、一方ssh <host> <command>
ソースのみ.bashrc
、つまり- 前者はログインシェルであり、後者はそうではありません。
これらの結論は正しいですか?がssh <host> <command>
インタラクティブな非ログインシェルとして扱われるのはなぜですか?SSHはまだリモートマシンにログインしてコマンドを実行していませんか?
.bashrc
エラーをスローしていましたが、同様の行はエラーをスローして.bash_profile
いませんでした。問題のある行を修正する前に、この不一致を調査する機会を得ました。
.bashrc
?の出力 そのファイルは出力を生成するものではありません。からの出力により、.bashrc
sshをトランスポートとして使用しているすべてのツールが壊れる可能性があります。