Подтвердить что ты не робот

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"

Но это не работает должным образом. Я должен индивидуально выполнять команды в приглашении оболочки.

4b9b3361

Ответ 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