I want to write a script that executes several commands on a remote server, which includes executing some applications. The
.bashrc file on the remote machine defines the
PATH variable so that these applications are under it.
But when I tried to use
ssh <host> <command> , it seems that
.bashrc was not loaded.
ssh <host> 'echo $PATH' only show a few pathes like
What confused me even more is that, even
ssh <host> "source ~/.bashrc; <command>" not worked.
ssh <host> 'source ~/.bashrc; echo $PATH' still only printed a few pathes. I checked by
ssh <host> 'cat ~/.bashrc' and confirmed that this file does contains all the
PATH definition, which was not affected in the environment where the command executed.
So after two hours of troubleshooting, I finally find the problem. It is because the following command in the beginning of
# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
This prevents anything after that being executed in the environment of
ssh <host> <command> .
If you have a similar issue try checking the beginning of the