Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

share|improve this question

1 Answer 1

up vote 12 down vote accepted

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}'"
share|improve this answer
    
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 '10 at 18:28

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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