PDA

Просмотр полной версии : специфика bash


Arsak
15.01.2007, 22:40
Образовался вопрос по shell script.
Если в шелл-скрипте объявить переменную как
export var=value
, то внутри скрипта (при его выполнении) оно так и есть - var имеет значение value.
Однако по завершению выполнения скрипта, если набрать в командной строке
echo $var
, то выведется не value, а пустое значение (как-будто var undefined).
С чем это связано? Вроде в баш нет разделения на локальные и глобальные переменные. И можно ли из скрипта сделать export переменной, чтобы она потом и на echo $var в командной строке выводилась?

P.S. Пробовал вариант
var=value
export value
- результат тот же.

Артур Крюков
16.01.2007, 00:27
Ключевое слово:


Однако по завершению выполнения скрипта

Переменная наследуется ТОЛЬКО в ПОРОЖДЕННЫЕ процессы. Командная строка (bash) откуда был запущен скрипт - родитель, а не потомок.

Arsak
02.02.2007, 23:12
Переменная наследуется ТОЛЬКО в ПОРОЖДЕННЫЕ процессы. Командная строка (bash) откуда был запущен скрипт - родитель, а не потомок.

интересная вещь - если запускать скрипт не прямым вызовом из командной строки, а через source путь_к_скрипту
,то переменная экспортируется и после отработки скрипта;
т.е. - скрипт отрабатывает, в командной строке набираешь echo $var, и вместо пустой строки выводится экспортированное значение;
значит, при запуске скрипта через source командная строка не является родителем? если не она, то что тогда в этом случае является родительским процессом?

Артур Крюков
02.02.2007, 23:52
интересная вещь - если запускать скрипт не прямым вызовом из командной строки, а через source путь_к_скрипту
,то переменная экспортируется и после отработки скрипта;
т.е. - скрипт отрабатывает, в командной строке набираешь echo $var, и вместо пустой строки выводится экспортированное значение;
значит, при запуске скрипта через source командная строка не является родителем? если не она, то что тогда в этом случае является родительским процессом?

Ну это что то типа оператора точка. Этот скрипт обрабатывается тем же экземпляром bash в котором вы набираете скрипт. Т.е. новый процесс не порождается, а скрипт обрабатывается самим процессом bash командной строки. Именно по этой причине переменные "остаются" в этом же процессе.