sh: symfony-cmd: command not found – Symfony

Photo of author
Written By M Ibrahim
composer-php symfony symfony-flex

Quick Fix: To resolve the issue, run the command composer require symfony/flex to install Symfony Flex, which includes the symfony-cmd command.

The Problem:

You’re getting a "sh: symfony-cmd: command not found" error while downgrading a Symfony 5.2 app template to Symfony 4.4. The installation seems partly successful, but you’re concerned about the error. You’re wondering what it means and how to fix it.

The Solutions:

Solution 1: Install Symfony Flex

The error message “sh: symfony-cmd: command not found” indicates that the symfony-cmd command is not available on your system. This command is a part of Symfony Flex, a tool that helps you manage your Symfony applications and install Symfony components and bundles.

To resolve this issue and be able to use the symfony-cmd command, you need to install Symfony Flex. You can do this by running the following command:

composer require symfony/flex

Once you have installed Symfony Flex, you should be able to use the symfony-cmd command without any issues.

Solution 2: Enable Symfony Flex Plugin

When using Composer 2.2.0 or later, you must explicitly allow the symfony/flex package to execute code during composer operations. This is a security measure introduced to prevent unauthorized plugins from running malicious code. To resolve the issue:

  1. Open your composer.json file located in the root of your Symfony project.

  2. Look for the "config" section, which usually contains various configuration options for Composer.

  3. Inside the "config" section, add the "allow-plugins" property. If it already exists, make sure it contains the following line:

    "allow-plugins": {
        "symfony/flex": true
    }
    

This configuration tells Composer to allow the symfony/flex package to execute code at startup.

  1. Save the changes to your composer.json file.

  2. Run composer install or composer update again.

The command should now work without the sh: symfony-cmd: command not found error. This is because the symfony/flex plugin is now authorized to execute code during the composer operation, allowing it to perform the necessary tasks for managing your Symfony project.

Solution 3: Remove symfony-cmd from Composer Scripts

Instead of adding Symfony\Flex to your project to resolve the symfony-cmd: command not found error, you can remove the references to symfony-cmd in your composer.json file. This will remove the error without the need to install Symfony\Flex.

To do this, locate the scripts section in your composer.json file and remove the symfony-cmd references from the auto-scripts, post-install-cmd, and post-update-cmd arrays.

Before:

"scripts": {
    "auto-scripts": {
        "cache:clear": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    },
    "post-install-cmd": [
        "@auto-scripts"
    ],
    "post-update-cmd": [
        "@auto-scripts"
    ]
}

After:

"scripts": {
    "auto-scripts": {},
    "post-install-cmd": [],
    "post-update-cmd": []
}

Once you’ve made these changes, save the composer.json file and run composer install or composer update again. The installation should complete without the symfony-cmd: command not found error.