I've prepended each of my bash config files (~/.bashrc
,~/.bash_profile
,~/.profile
) with echo NAME_OF_FILE
, i.e. I get '.bashrc' when I source in ~/.bashrc
.
What baffles me is why I get and indication that ~/.bashrc gets included when I run a command over ssh. E.g., if I do:
ssh localhost echo hi
I get
.bashrc
hi
Why is getting ~/.bashrc
sourced in in this context? Shouldn't it NOT get sourced in since this should run an non-interactive bash session?
Indeed, ssh localhost tty
gets me a 'not a tty' (preceded by '.bashrc' indicating that ~/.bashrc
gets sourced in nonetheless).
I've grep
ped all my config files for commands sourcing in ~/.bashrc
explicitly, and there are none that explain it.
(I only have tty -s && shopt -q login_shell && [[ -r ~/.bashrc ]] && . ~/.bashrc
in my .bash_profile
so that I get '.bashrc' even in interactive login shells, but this doesn't explain the ssh issueI can comment it out and I still get the same behavior with the above ssh examples)
How can I debug this?
From bash
man page:
Bash attempts to determine when it is being run with its standard input
connected to a a network connection, as if by the remote shell daemon,
usually rshd, or the secure shell daemon sshd. If bash
determines it is being run in this fashion, it reads and executes commands
from ~/.bashrc, if that file exists and is readable.
I.e. ~/.bashrc
will get run when you invoke it via ssh
, regardless of whether you have a tty or not.
If you only want your .bashrc
to run when you are interactive, try this at the top:
# If not running interactively, don't do anything
[[ "$-" != *i* ]] && return
If that doesn't work, try this:
[ -z "$PS1" ] && return
set -x
at the top and see if your .bashrc
is even being called. Then examine the values of those variables. — May 03, 2018 at 08:13 echo
command at the top and it ran. That is, .bashrc was called. — May 03, 2018 at 09:27 set
and an env
- try to work out what $-
and $PS1
are set to. (I'm starting to wonder if you are really in bash
.). Type bash
to get a sub-shell - so that you definitely know you are in a bash - and look at the values there. — May 03, 2018 at 09:55