12

This command doesn't work:

ssh $HOST "ls -l | awk '{print $1}'"`

Above ignores the command awk. I think it might be because of the double quotes?

Also, how would I add another set of double quotes inside the awk?

ie:

ssh $HOST "awk '{print $1 "*"}' /some_file"

I tried escaping the quotes, I even tried this:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

without success.

1 Answer 1

19

Variable interpolation is performed within double quotes, so here's what I think might be happening: when you type in ssh $HOST "ls -l | awk '{print $1}'", your shell (the one on your local computer, where you are running the SSH client) sees $1 within the double quotes and replaces it with the value of the variable $1, which will be blank. It isn't able to detect that the $1 is nested within single quotes within the double quotes. So what winds up getting sent to the remote server is

ls -l | awk '{print }'

which is basically equivalent to

ls -l | cat

i.e. it just prints out the output of ls -l.

Solution: escape the $ with a backslash,

ssh $HOST "ls -l | awk '{print \$1}'"
1
  • Haha, that was so simple! I just looked right through it! This did exactly what I wanted. ssh $HOST "ls -l | awk '{print \$1 \"*\"}'" Thanks a bunch!
    – Nick
    Aug 20, 2010 at 18:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.