Escape-персонаж в bash-скрипте - PullRequest
0 голосов
/ 03 февраля 2019

Я могу убить сеанс отдельного экрана с помощью этой команды:

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

Это \ escape-символ?В чем может быть проблема?Это пользователь apache, запускающий экран?

1 Ответ

0 голосов
/ 03 февраля 2019

Используйте две обратные косые черты.

В 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...