Ich möchte ein Shell-Skript schreiben, um Variablen zu exportieren.
Unten habe ich das Skript aufgelistet.
echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH='/home/linux/Practise/linux-devkit/bin/:$PATH';
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-';
echo "Export CROSS_COMPILE done"
Dies scheint jedoch nicht richtig zu funktionieren. Ich muss die Befehle stattdessen einzeln an der Shell-Eingabeaufforderung ausführen.
Antworten:
Bitte zeigen Sie uns weitere Teile des Skripts und teilen Sie uns mit, welche Befehle Sie einzeln ausführen mussten und einfach ausführen möchten.
In der Zwischenzeit müssen Sie doppelte Anführungszeichen und keine einfachen Anführungszeichen verwenden, um Variablen zu erweitern:
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
Semikolons am Ende eines einzelnen Befehls sind ebenfalls nicht erforderlich.
Bisher:
#!/bin/sh echo "Perform Operation in su mode" export ARCH=arm echo "Export ARCH=arm Executed" export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH" echo "Export path done" export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -? echo "Export CROSS_COMPILE done" # continue your compilation commands here ...
Denn
su
Sie können es ausführen mit:su -c 'sh /path/to/script.sh'
Hinweis: Das OP hat nicht explizit nach Schritten zum Erstellen von Exportvariablen in einer interaktiven Shell mithilfe eines Shell-Skripts gefragt. Er bat nur darum, sein Drehbuch höchstens beurteilen zu lassen. Er erwähnte keine Details darüber, wie sein Skript verwendet werden würde. Es könnte mit
.
odersource
von der interaktiven Shell gewesen sein. Es könnte ein eigenständiger Skript gewesen sein, oder es könntesource
aus einem anderen Skript stammen. Umgebungsvariablen sind nicht spezifisch für interaktive Shells. Diese Antwort löste sein Problem.quelle
source
oder.
) ausgeführt wird. Ich weiß es zu schätzen, dass Sie genau auf die Frage von OP antworten, aber ich habe dieses Thema von Google gefunden, und die nächste Antwort hat mir mehr geholfen als Ihre. Upvotes für die zweite Antwort (mitsource
und.
bestätigen Sie meine Meinung ...Sie müssen das Skript als
source
oder als Kurzform ausführen.
source ./myscript.sh
oder
Dies wird in der vorhandenen Shell ausgeführt, um sicherzustellen, dass alle vom Skript erstellten oder geänderten Variablen nach Abschluss des Skripts verfügbar sind.
Wenn Sie das Skript nur mit dem Dateinamen ausführen, wird das Skript in einer separaten Unterschale ausgeführt.
quelle
typeset -gx
, exportiert usw. wurden und mein WTF hatten? Moment und doch - wusste nicht, dass eine Subshell mit einem eigenen Bereich ausgeführt wird. Danke, dass du meinen Tag vor dem bevorstehenden Wut-Miss-ManagementFühren Sie das Skript als source = aus, um es auch im Debug-Modus auszuführen.
source= ./myscript.sh
quelle
Ich kann es nicht mit lösen
source ./myscript.sh
. Es heißt, die Quelle habe keinen Fehler gefunden.Fehlgeschlagen auch bei der Verwendung
. ./myscript.sh
. Es gibt kann nicht myscript.sh öffnen.Meine Option ist es also, es in eine Textdatei zu schreiben, die im nächsten Skript aufgerufen wird.
#!/bin/sh echo "Perform Operation in su mode" echo "ARCH=arm" >> environment.txt echo "Export ARCH=arm Executed" export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH" echo "Export path done" export "CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?" >> environment.txt echo "Export CROSS_COMPILE done" # continue your compilation commands here ...
Rufen Sie es an, wann immer es benötigt wird:
while read -r line; do line=$(sed -e 's/[[:space:]]*$//' <<<${line}) var=`echo $line | cut -d '=' -f1`; test=$(echo $var) if [ -z "$(test)" ];then eval export "$line";fi done <environment.txt
quelle
myscript.sh
so ändern , dass eine Dateienvironment.sh
mit dem Namen (mit den Exportanweisungen) generiertenvironment.sh
wird, die bei Bedarf nur die Quelle anstelle der while-Schleife enthält.