Command Line funktioniert nur mit vollständigem Pfad

felsi

Banned
Registriert
Mai 2007
Beiträge
556
Hallo,

ich versuche mich gerade in Command Lines für meinen Server einzuarbeiten. Laut Dokumentation kann man z.B. folgenden Befehl nutzen:

Code:
bin/magento list

Das führt bei mir zu folgender Fehlermeldung:

-bash: bin/magento: Keine Berechtigung

Nun habe ich folgendes versucht:

Code:
php bin/magento list

Das führt zu folgender Fehlermeldung:

Magento supports PHP 7.1.3 or later. Please read https://devdocs.magento.com/guides/v2.3/install-gde/system-requirements-tech.html-bash-4.2$ bin/magento list

Schlussendlich verwende ich den Befehl mit vollem Pfad zu PHP:

Code:
/opt/plesk/php/7.4/bin/php bin/magento list

Erst das führt endlich zum erwünschten Output.

Warum ist das so und warum kann ich nicht die Variante 1 oder zumindest 2 nutzen?

Wäre super, wenn mir jemand beim Verstehen und bei der Lösung des Problems hilft.

Danke
 
  1. kein executable Bit gesetzt
  2. offensichtlich hast du noch eine weitere PHP Version installiert. Mit which php siehst du, welches PHP die shell ausführen will, das wird nach Auswertung der PATH Variablen wahrscheinlich /usr/bin/php oder /usr/local/bin/php sein, was in der Regel als Symlink auf eine PHP Binary zeigt.
 
Hi,

man korrigiere mich, aber das erste ist doch ein Berechtigungs- und kein Pfadproblem, oder? Hast du es mal mit "sudo" versucht?

Und das zweite: sind weiter PHP-Versionen installiert?

VG,
Mad
 
which php bringt mir:

/usr/bin/php

Ich bin dem Pfad mal manuell gefolgt und da sind mehrere PHP Versionen:

/opt/plesk/php/7.3/bin/php
/opt/plesk/php/7.4/bin/php
usw.

Kann ich da nun etwas machen?
 
Klar kannst du etwas machen, die Frage ist eher: Was willst du denn?
Alles beschriebene ist kein Problem, sondern "works as designed".
 
Wie gesagt, anstatt

/opt/plesk/php/7.4/bin/php bin/magento list
würde ich zukünftig gerne nur
php bin/magento list

eingeben müssen. Bei Magento muss man nämlich leider unglaublich viele Command Lines eingeben und da wäre es sehr umständlich, wenn ich immer diesen kompletten Pfad eingeben muss. Kann mir auch nicht vorstellen, dass das im Sinne des Erfinders ist, oder?
 
Je nach Distribution kannst du den /usr/bin/php Symlink entweder per update-alternatives, alternatives oder halt von Hand mit ln -sf umbiegen. Letzteres wird dir unter Umständen bei späteren Updates wieder überschrieben.
Alternativ könntest du auch die PATH Variable für deine Shell oder deinen User so anpassen, dass die binaries in /opt/plesk/php/7.4/bin bevorzugt werden: export PATH="/opt/plesk/php/7.4/bin:$PATH"
Oder du setzt hinter dem Shebang (#!) in bin/magneto den richtigen Pfad, machst die Datei mit chmod +x ausführbar und kannst direkt mit bin/magneto arbeiten.

Wie du siehst führen viele Wege zum Ziel, welcher für dich der passende ist musst du wohl selber herausfinden.
 
  • Gefällt mir
Reaktionen: netzgestaltung und Der Lord
up.whatever schrieb:
Oder du setzt hinter dem Shebang (#!) in bin/magneto den richtigen Pfad, machst die Datei mit chmod +x ausführbar und kannst direkt mit bin/magneto arbeiten.
Danke. Das hört sich am besten an, da ich auf meinem Shared Server sowieso nicht so viele Rechte habe.

bin/magento sieht so aus:

Code:
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

if (PHP_SAPI !== 'cli') {
    echo 'bin/magento must be run as a CLI application';
    exit(1);
}

try {
    require __DIR__ . '/../app/bootstrap.php';
} catch (\Exception $e) {
    echo 'Autoload error: ' . $e->getMessage();
    exit(1);
}
try {
    $handler = new \Magento\Framework\App\ErrorHandler();
    set_error_handler([$handler, 'handler']);
    $application = new Magento\Framework\Console\Cli('Magento CLI');
    $application->run();
} catch (\Exception $e) {
    while ($e) {
        echo $e->getMessage();
        echo $e->getTraceAsString();
        echo "\n\n";
        $e = $e->getPrevious();
    }
    exit(Magento\Framework\Console\Cli::RETURN_FAILURE);
}

Könntest du mir noch mal weiterhelfen, was genau ich nun ändern müsste? Steige da leider noch nicht so ganz durch.

Danke noch mal.
 
Ganz oben eine neue Zeile einfügen:
Code:
#! /opt/plesk/php/7.4/bin/php
<?php
[...]
dann chmod +x bin/magento und das Ding sollte sich mit bin/magento ausführen lassen.
 
  • Gefällt mir
Reaktionen: netzgestaltung und felsi
Zurück
Oben