11

How can I run a simple Linux command in a Symfony command?

E.g. I want to run ssh username@host -p port at the end of the command...

I've tried:

$input = new StringInput('ssh username@host -p port');
$this->getApplication()->run($input, $output);

But that throws the following exception: `The "-p" option does not exist.``

It seems to be executed in the same "context" of my Symfony command.

3 Answers 3

11

How can I run a simple Linux command in a Symfony command?

First of all, try to execute a simple/plain command (ls) to see what happens, then move on to your special command.

http://symfony.com/doc/current/components/process.html

CODE:

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

$process = new Process('ls -lsa');
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

echo $process->getOutput();

RESULT:

total 36
4 drwxrwxr-x  4 me me 4096 Jun 13  2016 .
4 drwxrwxr-x 16 me me 4096 Mar  2 09:45 ..
4 -rw-rw-r--  1 me me 2617 Feb 19  2015 .htaccess
4 -rw-rw-r--  1 me me 1203 Jun 13  2016 app.php
4 -rw-rw-r--  1 me me 1240 Jun 13  2016 app_dev.php
4 -rw-rw-r--  1 me me 1229 Jun 13  2016 app_test.php
4 drwxrwxr-x  2 me me 4096 Mar  2 17:05 bundles
4 drwxrwxr-x  2 me me 4096 Jul 24  2015 css
4 -rw-rw-r--  1 me me  106 Feb 19  2015 robots.txt

As you can see above, if you put the piece of code in one of your controllers for testing purposes, ls -lsa lists files/folders stored under web folder!!!

You can just do shell_exec('ls -lsa'); as well which is what I sometimes do. e.g. shell_exec('git ls-remote url-to-my-git-project-repo master');

Sign up to request clarification or add additional context in comments.

Comments

8

This is the updated interface, used in Symfony 5.2. The process constructor now requires an array as input.

source: https://symfony.com/doc/current/components/process.html

The Symfony\Component\Process\Process class executes a command in a sub-process, taking care of the differences between operating system and escaping arguments to prevent security issues. It replaces PHP functions like exec, passthru, shell_exec and system

use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;

$process = new Process(['ls', '-lsa']);
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

echo $process->getOutput();

Comments

0

As far as I know, and I don't know much about Symfony, you have to specifiy the options before username@host. Check it here: http://linuxcommand.org/man_pages/ssh1.html

In you case:

'ssh -p port username@host'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.