Shell scripts, SSH sessions, and for loops, oh my!

Damian Gerow dgerow at afflictions.org
Mon Jul 25 00:32:49 GMT 2005


(I don't really know /where/ to ask this question.  It's not particularly
FreeBSD-centric, but the list has been good to me in the past, so hopefully
nobody minds.)

I'm trying to write a shell script that runs a for loop in an SSH session.
Simply, I'm trying to do this:

    for HOST in `cat hostnames` ; do
	ssh ${HOST} "for PROCESS in 01 02 ; do echo '${PROCESS}' ; done"
    done

But because this is run in a script, that gets translated to:

    for HOST in `cat hostnames` ; do
	ssh ${HOST} "for PROCESS in 01 02 ; do echo '' ; done"
    done

Which most definitely is not what I want.

I know a few ways around this -- expand the for loop, have a secondary
script, create a secondary script on-the-fly, etc. -- but I'm curious to see
if I can convince sh to *not* interpret ${PROCESS}.  I've tried escaping it,
I've tried a double-dollar, and I've tried escaping the double-dollar: none
have worked.

Does anyone have any ideas?

  - Damian

P.S. Please reply privately as well to the list; thanks.


More information about the freebsd-questions mailing list