Wenn ich $PATH
wie -bash:
folgt tippe, beginnt die Ausgabe mit dem Wert von $PATH
und am Ende wird sie gedruckt, : No such directory
während die Ausgabe von echo $PATH
diese Ausgabe nicht erzeugt.
Ist die Bash readline
beteiligt?
[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 $PATH
die Ausgabe mache, ist:
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin
$PATH
versucht, Ihren PATH als Befehl auszuführen,echo $PATH
gibt Ihren PATH aus.$PATH
machen?No such file or directory
. Bash findet die/usr/local/bin:/usr/bin[...]
ausführbare Datei und damit den Fehler nicht.Antworten:
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
$PATH
Variablen, die eigentlich kein Befehl ist. Siebash
beschwert sich daher , dass sie nicht zum Ausführen gefunden werden kann. (Die Shell durchsucht die durch Doppelpunkte getrennte Liste der in der$PATH
Variablen angegebenen Verzeichnisse nach dem von Ihnen eingegebenen Befehl.)In Ihrem zweiten Beispiel ist der "Befehl" das
echo
Verb mit dem Wert$PATH
als Argument. Derecho
Befehl druckt seine Argumente in stdout , sodass Sie den Wert von$PATH
auf dem Bildschirm sehen können.quelle
-bash
identifiziert den Prozess, der den Fehler meldet. Das-
vorbash
ist eine übliche Art, wie eine Shell sagt "Ich bin eine Login-Shell".Wenn Sie den Befehl eingeben
Sie erhalten die Fehlermeldung
Wenn Sie den Befehl eingeben
Sie erhalten die Fehlermeldung
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
In einer Bash-Shell ist es nur natürlich, dass die Fehlermeldung
beginnt mit dem Namen
bash
, weil bash diese Nachricht ausgegeben hat. Der eine Teil, der ein wenig kompliziert ist , dass es sagt ,-bash
stattbash
. 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:
.profile
und.bash_profile
ignoriert beim Starten von tmux von.bashrc
?exec $SHELL -l
dasquelle
$PATH
wertet 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 $PATH
gibt explizit einen Befehl zum Anzeigen des Inhalts der$PATH
Variablen.quelle
Dies entspricht
bash erweitert myvar und führt das Ergebnis der Variablen aus.
Die Ausgabe in diesem Fall ist
quelle
$: export myvar="echo test"
gefolgt von einer Rückgabe, erhalten Sie-bash: $:: command not found
$
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, dietest
auf stdout gedruckt wird .