Chciałbym napisać skrypt powłoki do eksportowania zmiennych.
Poniżej wymieniłem skrypt.
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"
Ale to nie wydaje się działać poprawnie. Zamiast tego muszę indywidualnie wykonywać polecenia w wierszu polecenia powłoki.
Odpowiedzi:
Pokaż nam więcej części skryptu i powiedz nam, jakie polecenia musiałeś wykonać indywidualnie i chcesz po prostu.
W międzyczasie, aby rozwinąć zmienne, musisz używać podwójnych cudzysłowów, a nie pojedynczego cudzysłowu:
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
Niepotrzebne są również średniki na końcu pojedynczego polecenia.
Jak dotąd:
#!/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 ...
Ponieważ
su
możesz go uruchomić za pomocą:su -c 'sh /path/to/script.sh'
Uwaga: OP nie prosił wprost o kroki, jak utworzyć zmienne eksportu w interaktywnej powłoce przy użyciu skryptu powłoki. Poprosił tylko o co najwyżej ocenę scenariusza. Nie wspomniał o szczegółach dotyczących wykorzystania jego scenariusza. Mogło to być za pomocą
.
lubsource
z poziomu powłoki interaktywnej. Mógł to być samodzielny skrypt lub mógł pochodzićsource
z innego skryptu. Zmienne środowiskowe nie są specyficzne dla powłok interaktywnych. Ta odpowiedź rozwiązała jego problem.źródło
source
lub.
). Doceniam, że odpowiadasz dokładnie na pytanie OP, ale znalazłem ten temat z google, a następna odpowiedź pomogła mi bardziej niż twoja. Głosy za drugą odpowiedzią (zsource
i.
potwierdzam moją opinię ...Musisz uruchomić skrypt jako
source
lub skrót.
source ./myscript.sh
lub
Będzie to działać w istniejącej powłoce, zapewniając, że wszelkie zmienne utworzone lub zmodyfikowane przez skrypt będą dostępne po zakończeniu działania skryptu.
Uruchomienie skryptu tylko przy użyciu nazwy pliku spowoduje wykonanie skryptu w osobnej podpowłoce.
źródło
typeset -gx
, eksportować itp. i miał mój wtf? w chwili, a jednak - nie wiedziałem, że podpowłoka jest wykonywana z własnym zakresem. dzięki za uratowanie mojego dnia przed zbliżającym się zarządzaniemUruchom skrypt jako source =, aby uruchomić również w trybie debugowania.
source= ./myscript.sh
źródło
Nie mogę tego rozwiązać
source ./myscript.sh
. Mówi, że źródło nie zostało znalezione.Niepowodzenie również podczas używania
. ./myscript.sh
. Nie można otworzyć myscript.sh.Więc moja opcja jest umieszczona w pliku tekstowym, który zostanie wywołany w następnym skrypcie.
#!/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 ...
Tnen nazywaj to, kiedy jest to potrzebne:
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
źródło
myscript.sh
tak, aby generował plik o nazwieenvironment.sh
(z instrukcjami eksportu), a następnie po prostu źródłoenvironment.sh
zamiast pętli while, gdy zajdzie taka potrzeba.