【问题标题】:PHP SSH2 echo to file for stop sessionPHP SSH2 回显到文件以停止会话
【发布时间】:2022-01-28 10:48:07
【问题描述】:

我想创建一个 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/\')

但这不起作用。

【问题讨论】:

  • 你错过了(
  • 在双引号内 PHP 将尝试解析以 $ 开头的代码,所以在你有 $(screen -ls..... 的那个命令中,我相信 PHP 会在那个括号上犹豫,因为没有变量会以括号开头.您应该尝试转义 $

标签: php linux screen ssh2-exec


【解决方案1】:

根据有关解析以$ 开头的双引号内的任何内容的评论,您可以尝试另一种方法来构造命令字符串,方法是使用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 );

【讨论】:

    【解决方案2】:

    试试这个怎么样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2011-06-21
      • 1970-01-01
      • 2023-03-30
      • 2014-10-21
      • 2012-01-01
      相关资源
      最近更新 更多