When I ssh into my ubuntu-box running Hardy 8.04, the environment variables in my .bashrc
are not set.
If I do a source .bashrc
, the variables are properly set, and all is well.
How come .bashrc
isn't run at login?
.bashrc
and .bash_profile
!
.bashrc
is not sourced when you log in using SSH. You need to source it in your .bash_profile
like this:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
I had similar situation like Hobhouse. I wanted to use the command
ssh myhost.com 'some_command'
where some_command
exists in /var/some_location
.
I tried to append /var/some_location
to the PATH environment variable by editing $HOME/.bashrc
but that wasn't working. Because per default, .bashrc
(on Ubuntu 10.4 LTS) exits early due to this piece of code:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Meaning if you want to change the environment for the ssh non-login shell, you should add code above that line.
bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
man ssh
: " If a command is specified, it is executed on the remote host instead of a login shell." For me on Fedora Core 29 it doesn't call neither .bashrc nor .bash_profile when running commands (and calls them without commands).
For an excellent resource on how bash invocation works, what dotfiles do what, and how you should use/configure them, read this:
DotFiles
If ayman's solution doesn't work, try naming your file .profile
instead of .bash_profile
. That worked for me.
.profile
is to be executed by any login shell, regardless of whether said shell intends to spawn a GUI. Your comment totally contradicts the question and this answer, which clearly indicate that .profile
is invoked on SSHing in - a distinctly non-GUI method.
Similar as @Loïc Wolff , Added below in my $HOME/.bash_profile
Ubuntu 16
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
echo "Executed .bash_profile , calling .bashrc"
. "$HOME/.bashrc"
fi
fi
Success story sharing
.bashrc
is sourced when you SSH in, by default..bashrc
out-of-the-box - but it does it from.profile
, not.bash_profile
.