Frage

Ich bin neu im Bash-Shell-Scripting und bin auf eine Herausforderung gestoßen.Ich weiß, dass ich meine „.profile“-Datei neu laden kann, indem ich einfach Folgendes tue:

. .profile

aber ich versuche, dasselbe in einem Bash-Skript auszuführen, das ich schreibe, und es funktioniert einfach nicht.Irgendwelche Ideen?Gibt es noch etwas, das ich zur Klärung beitragen kann?

Danke

War es hilfreich?

Lösung

Versuchen Sie, diese aktuelle Shell neu zu laden:

generasacodicetagpre.

Andere Tipps

Versuchen Sie das:

generasacodicetagpre.

Beim Versuch, die ~/.profile-Datei neu zu laden/auszulesen, treten einige Probleme auf.[Dies bezieht sich auf Ubuntu Linux – in einigen Fällen können die Details der Befehle unterschiedlich sein]

  1. Führen Sie dies direkt im Terminal oder in einem Skript aus?
  2. Wie führt man das in einem Skript aus?

Anzeige.1)

Wenn Sie dies direkt im Terminal ausführen, wird keine Subshell erstellt.Sie können also zwei Befehle verwenden:

source ~/.bash_profile

oder

. ~/.bash_profile

In beiden Fällen wird dadurch die Umgebung mit dem Inhalt der .profile-Datei aktualisiert.

Anzeige 2) Sie können jedes Bash-Skript entweder durch Aufrufen starten

sh myscript.sh 

oder

. myscript.sh

Im ersten Fall wird dadurch eine Subshell erstellt, die sich nicht auf die Umgebungsvariablen Ihres Systems auswirkt und diese nur für den Subshell-Prozess sichtbar sind.Nach Abschluss des Subshell-Befehls erfolgt keiner der Exporte usw.wird nicht angewendet.Dies ist ein häufiger Fehler und führt dazu, dass viele Entwickler viel Zeit verlieren.

Damit Ihre in Ihrem Skript vorgenommenen Änderungen für die globale Umgebung wirksam werden, muss das Skript ausgeführt werden

.myscript.sh

Befehl.

Um sicherzustellen, dass Ihr Skript nicht in einem Subshel ​​ausgeführt wird, können Sie diese Funktion verwenden.(Auch hier gilt das Beispiel für die Ubuntu-Shell)

#/bin/bash

preventSubshell(){
  if [[ $_ != $0 ]]
  then
    echo "Script is being sourced"
  else
    echo "Script is a subshell - please run the script by invoking . script.sh command";
    exit 1;
  fi
}

Ich hoffe, dass dies einige der häufigsten Missverständnisse ausräumt!:D Viel Glück!

Das Bash-Skript läuft in einer separaten Unterseite.Um diese Arbeit vorzunehmen, müssen Sie dieses andere Skript auch selben.

Versuchen Sie:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top