bash脚本中的转义符

时间:2019-02-03 10:15:52

标签: php linux bash shell unix

我可以使用以下命令终止独立的屏幕会话:

sudo kill $(screen -ls | awk '/ScreenName/ { print $1 }' | cut -f 1 -d '.')

我正在尝试将其实现到一个简单的PHP页面:

<?php
if ($_GET['run']) {
        $cmd =shell_exec("screen -ls | awk '/ScreenName/ { print $1 }' | cut -f 1 -d '.'");
        system('sudo kill $cmd');
?>
<a href="?run=true">Kill The Screen</a>

但是,PHP不起作用。我认为这是因为我无法正确实现$ cmd,因为当我尝试在终端中将命令分配给$ cmd并执行它时,它不起作用。简而言之,这发生了:

~$ cmd="screen -ls | awk '/ScreenName/ { print $1 }' | cut -f 1 -d '.'"
~$ echo $cmd
screen -ls | awk '/ScreenName/ { print $1}' | cut -f 1 -d '.'
~$ $cmd
No Sockets found in /run/screen/S-ubuntu

~$ screen -ls | awk '/ScreenName/ { print $1}' | cut -f 1 -d '.'
28578

\转义符吗?可能是什么问题呢?是运行屏幕的apache用户吗?

1 个答案:

答案 0 :(得分:0)

使用两个反斜杠。

在PHP中,\\更改为\

<?php
if ($_GET['run']) {
        $cmd =shell_exec("screen -ls | awk '/ScreenName/ { print \\$1 }' | cut -f 1 -d '.'");
        system('sudo kill $cmd');
?>
<a href="?run=true">Kill The Screen</a>