Я хочу написать сценарий оболочки для экспорта переменных.
Ниже я перечислил сценарий.
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"
Но, похоже, это не работает должным образом. Вместо этого я должен индивидуально выполнять команды в приглашении оболочки.
Ответы:
Пожалуйста, покажите нам больше частей скрипта и расскажите, какие команды вам нужно было выполнить индивидуально и которые вы хотите просто выполнить.
Между тем вы должны использовать двойные кавычки, а не одиночные кавычки, чтобы раскрыть переменные:
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's next to -? echo "Export CROSS_COMPILE done" # continue your compilation commands here ...
Ибо
su
вы можете запустить его с помощью:su -c 'sh /path/to/script.sh'
Примечание. OP явно не запрашивал шаги по созданию переменных экспорта в интерактивной оболочке с помощью сценария оболочки. Он только попросил, чтобы его сценарий был оценен по максимуму. Он не упомянул подробностей о том, как будет использоваться его сценарий. Это могло быть с помощью интерактивной оболочки
.
илиsource
из нее . Это мог быть отдельный скрипт, или он мог быть взятsource
из другого скрипта. Переменные среды не относятся к интерактивным оболочкам. Этот ответ решил его проблему.источник
source
или.
). Я ценю, что вы отвечаете именно на вопрос OP, но я нашел эту тему в Google, и следующий ответ помог мне больше, чем ваш. Upvotes для второго ответа (сsource
и.
подтвердить мое мнение ...Вам нужно запустить скрипт как
source
или сокращение.
source ./myscript.sh
или же
Это будет выполняться в существующей оболочке, гарантируя, что все переменные, созданные или измененные сценарием, будут доступны после завершения сценария.
Запуск сценария с использованием имени файла приведет к его выполнению в отдельной подоболочке.
источник
typeset -gx
, экспортируют и т.д. момент и все же - не знал, что подоболочка выполняется с собственной областью видимости. спасибо за спасение моего дня от надвигающегося гнева, промах-менеджментЗапустите сценарий как source = для запуска в режиме отладки.
source= ./myscript.sh
источник
Я не могу решить это с помощью
source ./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's next to -?" >> environment.txt echo "Export CROSS_COMPILE done" # continue your compilation commands here ...
Вызывайте его всякий раз, когда это необходимо:
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
источник
myscript.sh
так, чтобы он генерировал файл с именемenvironment.sh
(с операторами экспорта), а затем просто sourceenvironment.sh
вместо цикла while, когда это необходимо.