Jedes Mal, wenn ein neues Terminal geöffnet wird, tritt ein Fehler auf.
Fehler: „bash: ‚export:‘-Befehl nicht gefunden“
Ich kopiere nur „export all_proxy=""“ und „export ALL_PROXY=""“ ins Terminal. Wenn ich dann ein neues Terminal öffne, wird das Bild der Situation angezeigt.
Dies ist das Bild:
Ich gebe den Befehl ein:
grep export ~/.bashrc
Ausgabe:
Ich gebe den Befehl ein:
env SHELLOPTS=xtrace \
BASH_XTRACEFD=7 \
PS4='[${BASH_SOURCE:-$BASH_EXECUTION_STRING}:$LINENO]> ' \
7> >(grep ‘) bash -l
Ausgabe:
Antwort1
Es sieht so aus, als hätten Sie Ihre .bashrc-Datei bearbeitet.
Ich kann diesen Fehler genau reproduzieren, wenn ich
'‘export'
als letzte Zeile in meiner .bashrc
Um es zu überprüfen, führen Sie einfach aus
grep export ~/.bashrc
Wenn grep
eine Ausgabe wie die obenstehende erscheint, bearbeiten Sie sie aus Ihrer ~/.bashrc-Datei.
Bearbeiten: Aus der Bearbeitung Ihres letzten Beitrags können Sie ersehen, dass Sie zwei Zeilen haben, die mit „export“ beginnen, und sie beide aus ~/.bashrc löschen.
Antwort2
Angenommen, Sie haben den Befehl so kopiert und eingefügt, wie er ist, wird bemängelt, dass der ‘export
Befehl nicht gefunden wird, wo ‘
das U+2018 stehtlinkes einfaches AnführungszeichenNicht-ASCII-Zeichen (nicht zu verwechseln mit dem ASCII- '
Apostroph/einfachen Anführungszeichen (U+0027) oder dem ASCII- `
Backtick/Gravé-Akzent (U+0060)).
Da dieses Zeichen für keine besondere Bedeutung hat bash
, kann eine Befehlszeile wie die folgende verwendet werden:
‘export foo=bar’
(wobei ’
U+2019 das rechte einfache Anführungszeichen ist)
‘export
Wird als Ausführen des Befehls mit foo=bar’
Argument interpretiert . Hätten Sie geschrieben:
'export foo=bar'
stattdessen werden U+2018 und U+2019 durch ASCII-Apostrophe ersetzt, ein Zeichen, das bash
als Anführungszeichenoperator eine besondere Bedeutung hat und als Ausführung des export foo=bar
Befehls ohne Argument behandelt worden wäre. Einen solchen Befehl gibt es nicht. Das ist auch nicht das, was Sie wollen.
Sie wollen
export foo=bar
oder
'export' 'foo=bar'
export
Das bedeutet, den Befehl mit einem Argument auszuführen foo=bar
.
Hier müssen Sie das Zeichen U+2018 (und ggf. das entsprechende Zeichen U+2019, falls vorhanden) überall dort entfernen, wo Sie es in Ihrem ~/.bashrc
oder anderswo eingefügt haben. Wo auch immer Sie den Code kopiert und eingefügt haben, diese Zeichen waren nicht zum Kopieren gedacht.
Um herauszufinden, wo dieser falsche Befehl eingeführt wurde, wenn nicht in ~/.bashrc
(obwohl Ihre letzte Bearbeitung zeigt, dass er in ~/.bashrc
der Tat in Ihrem ist), können Sie versuchen, Folgendes auszuführen:
env SHELLOPTS=xtrace \
BASH_XTRACEFD=7 \
PS4='[${BASH_SOURCE:-$BASH_EXECUTION_STRING}:$LINENO]> ' \
7> >(grep ‘) bash -l
(das $PS4
würde root
jedoch von Shells, die mit Bash 4.4 oder neuer ausgeführt werden, ignoriert werden, was bei Ihnen der Fall zu sein scheint, weshalb Sie ++
stattdessen den Dateinamen und die Zeilennummer sehen).