shell
2013-08-31 2 views 37 likes 
37

Я хочу написать сценарий оболочки для экспорта переменных.Сценарий оболочки для установки переменных окружения

Ниже я перечислил сценарий.

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" 

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

+0

Какие оболочек вы используете (например, bash, ksh, sh) – Tom

+0

Возможный дубликат [Сохранить глобальные переменные BASH] (http://stackoverflow.com/questions/10779771/save-global-variables-bash) – tripleee

+1

Возможный дубликат [Экспортировать переменную в среду из bash, не используя его] (http://stackoverflow.com/questions/16618071/export-a-variable-to-the-environment-from-a-bash-script-without-sourcing-it) –

ответ

24

Пожалуйста, покажите нам больше частей сценария и сообщите нам, какие команды вам нужно выполнить индивидуально и просто.

В то же время вы должны использовать двойные кавычки не одиночные кавычки, чтобы расширить переменные:

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' 

(Для тех, кто downvote этот ответ, вы должны знать, что ОП не был явно требует оболочки скрипт, который будет экспортировать переменные на -interactive-shell, а не на одноразовый сценарий оболочки запуска, где использование source или . для его вызова было бы бессмысленным, если вы на самом деле не вызываете скрипт из ano это сценарий. Конечно, вы могли бы использовать source или ., если это действительно необходимо, но возникла еще одна проблема, которая должна была быть исправлена, и, похоже, фактическая проблема в этом контексте заключалась в использовании одинарных кавычек.

Не уменьшайте это только потому, что это вам не поможет. Ответ был сделан на вопрос, и для ОП.

Было бы применяться, если OP -Вообще mentioned-, что это действительно для наладки экспортируемых переменных сред на интерактивных оболочках через оболочку-скрипт.)

+1

HI konsolebox !! Большое спасибо . но я не понял разницу .. export PATH = "/ home/linux/Practice/linux-devkit/bin /: $ PATH" в двойных кавычках. & export CROSS_COMPILE = '/ home/linux/Practice/linux-devkit/bin/arm-arago-linux-gnueabi-' в одинарных кавычках. скрипт, измененный u, работает отлично. –

+0

Расширение @PragRao Paramater просто не происходит в одинарных кавычках. Вы можете объяснить подробности о дальнейшем цитировании [здесь] (https://www.gnu.org/software/bash/manual/html_node/Quoting.html). – konsolebox

+2

@konsolebox имя вопроса звучит как «Shell-скрипт для установки переменных среды» - большая часть сообщества нашла этот вопрос, чтобы решить проблему запуска этого типа скрипта из текущей оболочки ('source' или' .'). Я ценю, что вы точно отвечаете на вопрос OP, но я нашел эту тему в Google, и следующий ответ помог мне больше, чем ваш. Упреки во втором ответе (с 'source' и' .' подтверждают мое мнение ... – avtomaton

127

Вам необходимо запустить скрипт как source или сокращенную .

source ./myscript.sh 

или

. ./myscript.sh 

Это будет работать в рамках существующей оболочки, обеспечивая любые переменные, созданные или измененные с помощью сценария будет доступный после завершения скрипта.

Запуск скрипта с использованием имени файла будет выполнять скрипт в отдельной подоболочке.

+0

с использованием источника ./setenv.sh -: Дает ошибку источника, не найденную. и используя. ./setenv.sh он дает не может открыть setenv.sh. Не могли бы вы помочь мне в этом. Спасибо – Vishal

+2

это исправление разрешило мою проблему – sampathpremarathna

+1

царапал мне голову на час, почему эти чертовые экспортные варны arent там (zsh) пробовали 'typeset -gx', экспортировали и т. Д. И имел мой wtf? момент и все же - не знал, что подоболочка выполняется с ее собственной областью. спасибо от спасения моего дня от грядущего гневного промаха управления – Inoperable

Смежные вопросы