Führen Sie das Bourne Shell-Skript mit dem gleichen Exportbefehl aus

Ich habe ein Shell-Skript so etwas wie

#!/bin/sh

. ./.profile
echo "sample"

und die .profile-Datei hat

export variable = xyz

Wenn ich das Skript ausführe, erhalte ich eine Fehlermeldung

variable = xyz kein Bezeichner

Ich weiß, dass dies wegen des Selecline-Exports in .profile ist.

Gibt es einen Weg, wie ich es zum Laufen bringen kann? Ich sollte die sh nicht in bash oder ksh ändern und kann die .profile-Datei nicht ändern, da sie viele Zeilen mit demselben Zeilen-Export hat.

0
Ihr export ist falsch, verwenden Sie export varibale = "xyz" .
hinzugefügt der Autor fedorqui, Quelle

2 Antworten

Wenn Sie eine echte Bourne-Shell haben, müssen Sie sie in zwei Operationen aufteilen:

variable=xyz
export variable

Allerdings ist die Anzahl solcher Shells in diesen Tagen nahezu verschwindend gering - aber bis vor kurzem (zumindest innerhalb der letzten fünf Jahre) war der /bin/sh auf Solaris ausreichend Bourne-Shell So brauchte man die Zwei-Befehl-Operation.

Die Korn-Shell, POSIX-Shells und Bash unterstützen alle die Befehl export-and-assign-Vorgang.

Die von Ihnen angezeigte Zeile weist Probleme auf - Sie können keine Leerzeichen um den Zuweisungsoperator haben. Sie behaupten, geschrieben zu haben:

export varibale = xyz

Du hättest schreiben sollen:

export varibale=xyz

Die Fehlermeldung würde jedoch wie folgt lauten:

-bash: export: `=': not a valid identifier

Die Beschwerde sollte sein, dass = kein Bezeichner ist, nicht dass variable = xyz kein gültiger Bezeichner ist. Ich bin ein wenig verdächtig, dass das, was du zitierst, nicht 100% genau ist. Wie Sie sehen können, war das von bash , aber ich würde das auch von einer Bourne-Shell erwarten. Wenn du schreibst:

$ export 'variable = xyz'
-bash: export: `variable = xyz': not a valid identifier
$

dann erhalten Sie die Nachricht, die Sie behaupten, aber ich musste die Anführungszeichen um den exportierten "Wert" addieren.

0
hinzugefügt
Beispieldatei: Variable = xyz: ist kein Bezeichner ... das ist der genaue Fehler, den ich bekomme
hinzugefügt der Autor user3108179, Quelle
gibt es eine Möglichkeit, wie wir es vermeiden können, es in zwei verschiedenen Zeilen zu schreiben ... Ich arbeite an einer Unix-Plattform
hinzugefügt der Autor user3108179, Quelle
OK, um Verwirrung zu vermeiden ... Ich möchte meine .profile-Datei nicht ändern, da sie auf vielen verschiedenen Servern repliziert wird, so dass das Ändern der .profile-Datei nicht in Frage kommt ...
hinzugefügt der Autor user3108179, Quelle
Wie ändert sich das Ändern der Shell in bash oder ksh, um dieses Problem zu lösen ... da das Skript in bourne shell (sh) ist
hinzugefügt der Autor user3108179, Quelle
Ohne Leerzeichen zeigt es stark an, dass Sie eine echte Bourne-Shell haben und die separate Zuweisungs-und-Export-Notation verwenden müssen, die im ersten Teil meiner Antwort beschrieben wird. Auf welcher Plattform laufen Sie?
hinzugefügt der Autor Jonathan Leffler, Quelle
Ja: variable = xyz; exportiere die Variable mit dem Semikolon, das die beiden Befehle trennt. Einige meiner Profilskripte verwenden das noch, weil sie vorgeben, mit einer echten Bourne-Shell zu arbeiten, und ich hatte noch keinen Grund, sie zu ändern. Aber ich nehme standardmäßig eine modernere Shell an. Wenn Sie über eine echte Bourne-Shell verfügen, können Sie zwei separate Vorgänge - Zuweisung und Export - nicht vermeiden, um eine Umgebungsvariable zu erstellen.
hinzugefügt der Autor Jonathan Leffler, Quelle
Wenn es nicht funktioniert, aber Sie können es nicht ändern, haben Sie ziemlich viele Optionen. Am besten ist es, wenn Ihre Login-Shell in bash oder ksh geändert wird - entweder wird die Notation export var = value akzeptiert.
hinzugefügt der Autor Jonathan Leffler, Quelle
Vielleicht nicht; Vielleicht müssen Sie die Shebang-Zeile ändern, um /bin/ksh oder /bin/bash statt /bin/sh zu spezifizieren? Ich habe den Überblick verloren, was dein Problem wirklich ist, aber da das, was du hast, nicht funktioniert, wird sich etwas ändern müssen.
hinzugefügt der Autor Jonathan Leffler, Quelle

In Shell-Skripten sind Leerzeichen in der Variablenzuweisung nicht zulässig .

Sie sollten einfach verwenden:

export variable=xyz
0
hinzugefügt
ok ... export variable = xyz .... aber die frage ist, ich sollte nicht die sh zu bash oder ksh ändern und kann nicht ändern die. profile-datei wie es viele linien mit idenline export hat ..... gibt es a Möglichkeit, ohne diesen Fehler zu laufen
hinzugefügt der Autor user3108179, Quelle