Есть ли метод, похожий на PHP GET для сценариев bash?
Это то, что я пытаюсь сделать...
PHP файл устанавливает переменную и выполняет удаленный сценарий bash, переменная передается и используется в сценарии bash.
Итак, это мой PHP-скрипт...
<?php
$myvar = 'hello world';
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream = ssh2_exec($connection, '/usr/incoming/myscript.sh');
?>
И это myscript.sh на удаленной машине...
#!/bin/bash
echo $myvar
Конечно, это не работает, потому что я не уверен, как передать $ myvar из файла PHP в myscript.sh
Я знаю с PHP, это делается с использованием GET, но как это сделать в этой ситуации?
Как прокомментировал @Phylogenesis, вы хотите просто поместить переменные после вызова сценария, а затем вызвать скрипт bash, используя $1
чтобы прочитать var:
$stream = "/usr/incoming/myscript.sh " . escapeshellarg($myvar);
Ваш скрипт bash будет выглядеть так:
#!/bin/bash
echo "$1"
$myvar
в php может содержать одинарные кавычки. Переменные, которые должны быть расширены в командной строке, должны быть правильно экранированы, чтобы быть безопасными.
Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash даже через SSH. Получить его здесь: https://github.com/merlinthemagic/MTS
После загрузки вы просто используете следующий код:
$shell = \MTS\Factories::getDevices()->getRemoteHost('example.com')->getShellBySsh('username', 'secretPassword');
//instead of triggering a script, just trigger the individual commands i.e.:
$return1 = $shell->exeCmd("echo \$myvar");
script.php
<?php
$myvar = 'hello world';
$myvar = escapeshellarg($myvar);
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream = ssh2_exec($connection, '/usr/incoming/myscript.sh '.$myvar);
myscript.sh
#!/bin/bash
echo $1
hello
из скрипта оболочки, поскольку оболочка $myvar
будет $myvar
слова. Переменные, которые должны быть расширены в командной строке, должны быть правильно экранированы, чтобы быть безопасными.
$1
,$2
,$3
... Просто добавьте их в свой вызов exec:ssh2_exec($connection, '/usr/incoming/myscript.sh param1 param2');
,