I have a CentOS VM to which I log in using SSH. I appended the following line to
echo "from ~/.bashrc: (pid $$)"
and the following line to .bash_profile
echo "from ~/.bash_profile"
When I log into the VM and run
ps I get the following output
user@laptop:~ $ ssh vmcentos Last login: Sun May 17 04:48:24 2020 from 192.168.122.1 from ~/.bashrc: (pid 1821) from ~/.bash_profile [admin@localhost ~]$ ps -H -o pid,command PID COMMAND 1821 -bash 1844 ps -H -o pid,command [admin@localhost ~]$
This output is what I expect since the shell I log into is an interactive login shell and thus the
.bash_profile file is sourced which in turn sources the
Now I log out from the VM and execute the following command
user@laptop:~ $ ssh vmcentos 'sleep 60; echo $-' from ~/.bashrc: (pid 1901) hBc user@laptop:~ $
then I log into another ssh session on the VM and inspect the process table
[admin@localhost ~]$ ps -eH -o pid,command PID COMMAND (... more output here...) 1900 sshd: admin@notty 1901 bash -c sleep 60; echo $- 1914 sleep 60 (... more output here...)
As far as I understand the shell that ssh executes (process 1901) is non-interactive (because of the
-c option and also because the
$- variable contains no
i character) and non-login (because
ARGV0 is not
-bash and no
--login option is provided). Thus neither
.bash_profile should be sourced. Yet the output of the command clearly shows that
.bashrc was sourced. Why?
I used a standard CentOS installation with the standard