bash: 'export: Befehl nicht gefunden

bash: 'export: Befehl nicht gefunden

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:

Bildbeschreibung hier eingeben

Ich gebe den Befehl ein:

grep export ~/.bashrc

Ausgabe:

Bildbeschreibung hier eingeben

Ich gebe den Befehl ein:

env SHELLOPTS=xtrace \
    BASH_XTRACEFD=7 \
    PS4='[${BASH_SOURCE:-$BASH_EXECUTION_STRING}:$LINENO]> ' \
    7> >(grep ‘) bash -l

Ausgabe:

Bildbeschreibung hier eingeben

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 grepeine 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 ‘exportBefehl 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)

‘exportWird 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 bashals Anführungszeichenoperator eine besondere Bedeutung hat und als Ausführung des export foo=barBefehls 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'

exportDas 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 ~/.bashrcoder 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 ~/.bashrcder 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 $PS4würde rootjedoch 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).

verwandte Informationen