Shell script для установки переменных среды
Я хочу написать оболочку script для экспорта переменных.
Ниже я перечислил script.
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"
Но это не работает должным образом. Я должен индивидуально выполнять команды в приглашении оболочки.
Ответы
Ответ 1
Пожалуйста, покажите нам больше частей сценария и расскажите, какие команды вам нужно было выполнять индивидуально и просто хотите.
Между тем вы должны использовать двойные кавычки, а не одинарные кавычки для расширения переменных:
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
Точки с запятой в конце одной команды также не нужны.
Пока что:
#!/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 next to -?
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...
Для su
вы можете запустить его с помощью:
su -c 'sh /path/to/script.sh'
Примечание: OP явно не запрашивал шаги по созданию переменных экспорта в интерактивной оболочке с использованием сценария оболочки. Он только попросил, чтобы его сценарий был оценен максимально. Он не упомянул подробности того, как будет использоваться его сценарий. Это можно было сделать с помощью .
или source
из интерактивной оболочки. Это мог быть автономный сценарий или source
из другого сценария. Переменные среды не являются специфичными для интерактивных оболочек. Этот ответ решил его проблему.
Ответ 2
Вам нужно запустить script как source
или стенографию .
source ./myscript.sh
или
. ./myscript.sh
Это будет работать в рамках существующей оболочки, гарантируя, что любые переменные, созданные или измененные с помощью script, будут доступны после завершения script.
Запуск script только с использованием имени файла будет выполнять script в отдельной подоболочке.
Ответ 3
Я не могу решить это с source./myscript.sh
. Там написано, что источник не найден.
Не удалось также при использовании ../myscript.sh
../myscript.sh
. Это дает не могу открыть myscript.sh.
Поэтому мой вариант - поместить его в текстовый файл для вызова в следующем скрипте.
#!/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 next to -?" >> environment.txt
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...
Tnen звоните, когда это необходимо:
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