I suddenly realized I don't know how to execute things over SSH.
I tried to do
$ ssh user@server sh -c 'echo "hello"'
but it outputs nothing, or rather, it outputs an empty line. If the command given to ssh
is run through $SHELL -c
on the remote host, then I can see why that is (or I can try to rationalize it to myself anyway).
Ok, second try:
$ ssh user@server 'echo "hello"'
hello
All well and good.
Now for what I was really hoping would work:
$ ssh user@server 'echo "hello $1"' sh "world"
hello sh world
Hmm... where does the sh
come from? This is indicating that $1
is empty and that what really gets executed on the other side is something like
$SHELL -c 'echo "hello sh world"'
and not what I had hoped,
$SHELL -c 'echo "hello $1"' sh "world"
Is there a way to safely pass arguments to the script executed via ssh
, in a sane and sensible way that is analogous to running
sh -c 'script text' sh "my arg1" "my arg2" "my arg3" ...
but on the remote host?
My login shell, both locally and remotely is /bin/sh
.
Safely = Preserving whitespace etc. in arguments.
Sanely = No crazy escaping of quotes.