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 /usr/bin .
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.
Advertisement
Answer
So after two hours of troubleshooting, I finally find the problem. It is because the following command in the beginning of .bashrc .
# 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 .bashrc file.