I've noticed that when I run a command directly on an SSH host using the
ssh <host> <command> syntax, I see the output of
.bashrc but not the output of
For instance, if I place the following command at the top of both files,
and manually source
.bash_profile (which sources
.bashrc in turn), I'll see
$ . .bash_profile .bash_profile .bashrc
This is the same output I see if I log into this computer remotely via SSH, using the
ssh <host> form of the command. (And if I stow
.bash_profile somewhere else temporarily, neither of these lines gets echoed.)
However, if I execute a command directly on the remote machine with the
ssh <host> <command> form of
ssh, then the output looks like this:
$ ssh <host> echo foo /home/rlue/.bashrc foo
My understanding is that the difference between
.bashrc is that the former is for login shells while the latter is for interactive, non-login shells.
I've concluded the following:
ssh <host>sources only
ssh <host> <command>sources only
.bashrc, which means
- the former is a login shell and the latter is not.
Are these conclusions correct? Why is
ssh <host> <command> treated as an interactive, non-login shell? Isn't SSH still logging into the remote machine to execute the command?