Как передать аргумент подоболочке (посредством выполнения, а не источника) без аргумента командной строки?

Например, у меня есть основная программа оболочки main.sh и другая вспомогательная программа sub.sh. Я хочу передать подоболочке переменную var, но не хочу использовать аргумент командной строки. Пример кода следующий:

#In main.sh
a=1
./sub.sh

#In sub.sh
echo $a

Я хочу увидеть результат: 1

Я знаю, что этот вопрос странный, но эта функция лучше всего соответствует моим потребностям. Я не могу получить sub.sh, потому что в реальной программе мне нужно передать МНОГО переменных... Спасибо!

РЕДАКТИРОВАТЬ: что, если я запускаю sub.sh в фоновом режиме, и это занимает 10 часов, и я хочу запустить еще один sub.sh на переднем плане для другой переменной b?


person return 0    schedule 25.10.2013    source источник


Ответы (2)


У вас просто есть дополнительная новая строка:

#In main.sh
a=1 ./sub.sh

Это действительно тот же ответ, что и 1_CR, но демонстрирует технику передачи значения в среду sub.sh вместо изменения текущей среды для наследования sub.sh.

Поскольку это модификация среды для каждого процесса, вы можете повторить ее при необходимости.

a=1 ./sub.sh &
a=3 b=9 ./sub.sh &

Каждый экземпляр sub.sh видит другое значение для a, а второй экземпляр также видит значение для b.

person chepner    schedule 25.10.2013

Вы можете просто экспортировать переменную a

a=1
export a
./sub.sh

Это приводит к тому, что a находится в среде последовательно выполняемых команд.

person iruvar    schedule 25.10.2013
comment
Что, если я запускаю sub.sh в фоновом режиме, и это занимает 10 часов, и я хочу запустить еще один sub.sh на переднем плане для другой переменной b? - person return 0; 26.10.2013
comment
@ return0, похоже, вам нужно решение Чепнера - person iruvar; 26.10.2013