1

我想创建一个 stop.sh 文件来停止屏幕会话。

$test = "screen_name";

这是命令:

kill -15 $(screen -ls | grep '[0-9]*\.$test' | sed -E 's/\s+([0-9]+)\..*/\1/'`)

我想用 php ssh2_exec 创建这个文件,如下所示:

ssh2_exec($connection, "echo 'kill -15 $(screen -ls | grep '[0-9]*\.$test' | sed -E 's/\s+([0-9]+)\..*/\1/')' > /home/test/stop.sh");

但我明白了:

sh: 1: Syntax error: "(" unexpected

我试过了:

kill -15 $(screen -ls | grep \'[0-9]*\.$test\' | sed -E \'s/\s+([0-9]+)\..*/\1/\')

但这不起作用。

4

2 回答 2

0

根据关于解析以 a 开头的双引号内的任何内容的评论,$您可以尝试另一种方法来构造命令字符串,方法是使用sprintf单引号并将整个命令包装在单引号中,但其中包含双引号。

$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;

这会产生一个最终的命令字符串:

kill -15 $(screen -ls | grep "[0-9]*\.banana" | sed -E "s/\s+([0-9]+)\..*/\1/") > /home/test/stop.sh

看起来不错,所以你可以这样做:

ssh2_exec( $connection, $cmd );
于 2022-01-28T11:33:51.623 回答
0

试试这个怎么样:

$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);
于 2022-01-28T12:09:01.183 回答