The Computer Oracle

Why is SSH not invoking .bash_profile?

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping

--

Chapters
00:00 Why Is Ssh Not Invoking .Bash_profile?
00:33 Answer 1 Score 7
01:07 Answer 2 Score 1
01:25 Accepted Answer Score 13
01:38 Answer 4 Score 2
02:17 Thank you

--

Full question
https://superuser.com/questions/952084/w...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#bash #ssh

#avk47



ACCEPTED ANSWER

Score 13


SSH with a command will NOT start a login shell. Thus bash_profile is not sourced.

See details here




ANSWER 2

Score 7


Do you have a .bashrc file set? It could be damaged or corrupted or has something that causes the processing of .bashrc to choke and fail. And as a result, the doesn’t get to the point where it can cleanly digest/process .bash_profile.

As shown on this site, .bashrc loads before .bash_profile:

Interactive login Interactive non-login Script
/etc/profile A
/etc/bash.bashrc A
~/.bashrc B
~/.bash_profile B1
~/.bash_login B2
~/.profile B3
BASH_ENV A
~/.bash_logout C

I would recommend checking that .bashrc and maybe even temporarily renaming it something like .bashrc_off to disable it to test the theory before debugging any further.




ANSWER 3

Score 2


add -l may be an easy workaround, -l option makes bash act as a login shell, a login shell will execute .bash_profile.

ssh $host bash -l -c single_word_command

or

ssh $host bash -l -c '"commands with space"'

because $ sign needs escape, to echo $PATH some additional work is needed, something like

ssh $host bash -l -c "'echo \$PATH'"

the \ before $ prevent "local" shell to replace $PATH to real value, the ' in " is needed because outer " is removed after sending to "remote"

by the way ssh -v and bash -v is very helpful for debugging escape things like this




ANSWER 4

Score 1


What was that last bit about /bin/sh? If root's default shell is set to /bin/sh, then bash will be invoked in POSIX Bourne shell compatibility mode, where bash-specific startup scripts will not be run.