How do I use pipes with a system() call using ssh? Parsing issue?
Show older comments
Folks,
I am having difficulty, I believe with parsing, of a string that I am using to make a system call on my Windows 10 system.
I can run the exact following command from my Windows 10 command prompt:
ssh user@domain /bin/ps -aef | /bin/grep SearchString | /bin/awk "{print $2}"
It will send the command with all the pipes correctly to the domain computer and return the result.
When I do this, it does not work:
[a, b] = system('ssh user@domain /bin/ps -afe | /bin/grep SearchString | /bin/awk "{print $2}"')
It returns a = 255 (error)
If I reduce this to
[a, b] = system('ssh user@domain /bin/ps -afe | /bin/grep SearchString')
it still fails.
If I further reduce this to
[a, b] = system('ssh user@domain /bin/ps -afe')
it works.
So I expect this has something to do with parsing the pipe symbol. Any ideas on how to address this? I tried replacing the pipe with '|' and \|, but that did not fix the issue.
Thank you,
Kris
Accepted Answer
More Answers (1)
Walter Roberson
on 12 Nov 2019
[a, b] = system('ssh user@domain ''/bin/ps -afe | /bin/grep SearchString | /bin/awk "{print $2}"''')
Otherwise the | is going to be interpreted locally.
MATLAB does not exactly just submit the command to the local command shell: it does some parsing of it even on windows. If you look at the details, the processing of & for background execution is documented as taking place at parsing time, and also some details about blocking (I think it is) on windows systems are at the parsing level.
You should thus expect that an unquoted unescaped | will be able interpreted as something to be run on the local system: the unquoted unescaped | would mark the end of the ssh command
1 Comment
Kristoffer Walker
on 13 Nov 2019
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!