简体   繁体   中英

Error when running bash command over ssh

When trying to run the following command over ssh:

ssh hostname 'for pid in $(ps -ef | grep "some process" | awk '{print $2}'); do kill -9 $pid; done'

I get the following error:

awk: cmd. line:1: {print
awk: cmd. line:1:       ^ unexpected newline or end of string

I've tried escaping in different ways but haven't found the correct way - or maybe it's something else?

Thanks in advance!

You cannot include single quotes into a single-quoted string, since nothing is interpreted inside, except the single quote that closes the string. You can concatenate the single-quoted strings with "'" :

ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done'

Alternatively, concatenate escaped single quotes ( \\' ):

ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done'

See Strong Quoting .

The Cause of the Error

Your command is interpreted as a couple of $IFS -separated arguments:

  • for pid in $(ps -ef | grep "some process" | awk {print
  • }); do kill -9 $pid; done

There is no $2 in the strings, since $2 is interpreted as a shell variable, and the value of this variable in the normal shell context is empty.

Thus, you have sent the following command to the server:

for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done

If you run this command in a terminal, you will get the same error from AWK.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM