I want to create a stop.sh file for stopping screen session.
$test = "screen_name";
This is the command:
kill -15 $(screen -ls | grep '[0-9]*\.$test' | sed -E 's/\s ([0-9] )\..*/\1/'
)
And i want to create this file with php ssh2_exec like this:
ssh2_exec($connection, "echo 'kill -15 $(screen -ls | grep '[0-9]*\.$test' | sed -E 's/\s ([0-9] )\..*/\1/')' > /home/test/stop.sh");
But i got this:
sh: 1: Syntax error: "(" unexpected
I tried:
kill -15 $(screen -ls | grep \'[0-9]*\.$test\' | sed -E \'s/\s ([0-9] )\..*/\1/\')
but not working..
CodePudding user response:
As per the comment regarding parsing anything within double quotes that begins with a $
you could try an alternative to construct the command string by using sprintf
and wrapping the whole command in single quotes but with double quotes within.
$test='banana';
$cmd=sprintf('kill -15 $(screen -ls | grep "[0-9]*\.%s" | sed -E "s/\s ([0-9] )\..*/\1/") > /home/test/stop.sh', $test );
echo $cmd;
Which yields a finalised command string:
kill -15 $(screen -ls | grep "[0-9]*\.banana" | sed -E "s/\s ([0-9] )\..*/\1/") > /home/test/stop.sh
which looks OK, so you could then do:
ssh2_exec( $connection, $cmd );
CodePudding user response:
What about trying this:
$text = 'echo \'kill -15 $(screen -ls | grep \'[0-9]*\.'$test.'\' | sed -E \'s/\s ([0-9] )\..*/\1/\')\' > /home/test/stop.sh\' ;
ssh2_exec($connection, $text);