$ PATH alleine gegen echo $ PATH

9

Wenn ich $PATHwie -bash:folgt tippe, beginnt die Ausgabe mit dem Wert von $PATHund am Ende wird sie gedruckt, : No such directory während die Ausgabe von echo $PATHdiese Ausgabe nicht erzeugt.
Ist die Bash readlinebeteiligt?

[user1@Server1 ~]$ $PATH
-bash: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin: No such file or directory

Wenn ich nur echo $PATHdie Ausgabe mache, ist:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin
RKA
quelle
2
$PATHversucht, Ihren PATH als Befehl auszuführen, echo $PATHgibt Ihren PATH aus.
DisplayName
2
Ich bin neugierig, was wolltest du $PATHmachen?
Kusalananda
3
Schauen Sie sich das Ende der Ausgabe an, nicht nur den Anfang : No such file or directory. Bash findet die /usr/local/bin:/usr/bin[...]ausführbare Datei und damit den Fehler nicht.
Jorge Bellon

Antworten:

14

Das erste Wort in einer einfachen Befehlszeile ist ein Befehl - eine Aktion. (Es gibt komplexere Varianten, aber betrachten Sie dies vorerst als ausreichende Wahrheit.)

In Ihrem ersten Beispiel ist der "Befehl" der Wert der $PATHVariablen, die eigentlich kein Befehl ist. Sie bashbeschwert sich daher , dass sie nicht zum Ausführen gefunden werden kann. (Die Shell durchsucht die durch Doppelpunkte getrennte Liste der in der $PATHVariablen angegebenen Verzeichnisse nach dem von Ihnen eingegebenen Befehl.)

In Ihrem zweiten Beispiel ist der "Befehl" das echoVerb mit dem Wert $PATHals Argument. Der echoBefehl druckt seine Argumente in stdout , sodass Sie den Wert von $PATHauf dem Bildschirm sehen können.

Roaima
quelle
1
verstanden! Ich treid unter commd [user1 @ Server1 ~] $ abc: def und die Ausgabe ist unten. Das macht Sinn. Ich verstehe das erste Wort der Ausgabe immer noch nicht - "-bash" -bash: abc: def: Befehl nicht gefunden
RKA
2
@RaviKumar Der -bashidentifiziert den Prozess, der den Fehler meldet. Das -vor bashist eine übliche Art, wie eine Shell sagt "Ich bin eine Login-Shell".
Kusalananda
13

Wenn Sie den Befehl eingeben

$ cat food

Sie erhalten die Fehlermeldung

cat: food: No such file or directory

Wenn Sie den Befehl eingeben

$ cp abc def

Sie erhalten die Fehlermeldung

cp: cannot stat abc’: No such file or directory

Es ist sehr sehr häufig für Fehlermeldungen in Unix und Linux mit dem Namen des Programms zu beginnen , die ausgegeben (dh geschrieben) sie. Also, wenn Sie tippen

$ abc:def

In einer Bash-Shell ist es nur natürlich, dass die Fehlermeldung

-bash: abc:def: command not found

beginnt mit dem Namen bash, weil bash diese Nachricht ausgegeben hat. Der eine Teil, der ein wenig kompliziert ist , dass es sagt , -bashstatt bash. Dies geschieht , weil bash a Shell , und insbesondere ein Login - Shell .   Konventionell beginnen die Namen von Login-Shells immer mit a -.

Weitere Hintergrundinformationen hierzu finden Sie unter:

G-Man sagt "Reinstate Monica"
quelle
3

$PATHwertet nur die Variable aus und versucht, sie als Befehl auszuführen, da es weder Argumente noch den tatsächlichen Befehlsnamen gibt, dann beschwert sie sich als : no such file or directory.

echo $PATHgibt explizit einen Befehl zum Anzeigen des Inhalts der $PATHVariablen.

Luis Dalo
quelle
-2

Dies entspricht

export myvar="echo test"
$myvar

bash erweitert myvar und führt das Ergebnis der Variablen aus.

Die Ausgabe in diesem Fall ist

Prüfung

Vineeth Chowdhary
quelle
Wenn Sie eingeben, $: export myvar="echo test"gefolgt von einer Rückgabe, erhalten Sie-bash: $:: command not found
Anthon
@Anthon Das $: kann seine Eingabeaufforderung sein. Es ist dann kein Befehl.
Peterh - Wiedereinstellung Monica
@peterh Ja, ich weiß, und obwohl mir klar wurde, aber da dies kein Standard ist ( $ich würde es aber erwarten $:), sollte dies klarer angegeben (und formatiert) werden. Es kann auch sein, dass diese zwei (oder drei) Zeilen der Name eines ausführbaren Programms (in Zeilenumbrüche eingebetteter Name) und einer ausführbaren Datei sind, die testauf stdout gedruckt wird .
Anthon