environment variables in ssh non-interactive shell

Brian Wilson wilson@ds.net
Mon Nov 12 13:06:00 GMT 2012

> I'm trying to use environment variables to pilot a windows system
> through cygwin+ssh. Things work nicely with an interactive shell, but
> mess up with a non-interactive shell because my environment variables
> aren't set.
<< -snip- >>
> Does anyone have an idea what could be wrong?

I'd suggest a simple approach like testing to see if there is a terminal 
attached then source in the .bashrc or other environment setting files.  Try 
something like this:

[[ ! -t 1 ]] && [[ -f ~/.bashrc ]] && . ~/.bashrc

If there is no terminal attached to the session, and there is a .bashrc file 
in ${HOME}, source the file into the current environment.  You may want to do 
something similar for the /etc/profile or ~/.profile files in which case I 
would use a regular "if" styled statement.  Make sure ${HOME} is set 
(obviously) or explicitly set the value if it is not set in the script.  
Carefully check the file permissions to make sure everything has the correct 
read, write, and execute permissions (i.e. You don't want to execute a file 
that just anyone can write into) or you may get a nasty surprise.

if [[ ! -t 1 ]]
     echo -e "\n\tNo interactive terminal found for this session.\n\tSetting 
the environment.\n"
     [[ "${HOME}" = "" ]] && HOME=/usr/<usr_dir>/...
     if [[ -f /etc/profile ]]
          . /etc/profile
     if [[ -f ${HOME}/.profile ]]
          . ${HOME}/.profile
     if [[ -f ${HOME}/.bashrc ]]
          . ${HOME}/.bashrc

Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

More information about the Cygwin mailing list