Когда я запускаю команду 'set' в оболочке bash, я вижу, что переменная имеет значение. Однако, когда я запускаю команду set в скрипте bash, переменная не существует. Зачем? Как я могу это сделать?в bash, почему переменная видима в оболочке, но не в сценарии оболочки
AxOS(7iq1) root:/mnt/ax/scratch/roshi# set
--snip--
SERIAL_NUMBER=7iq1
--snip--
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
Мой сценарий оболочки tmp.sh содержит
#!/bin/bash
svcid=`set | grep ^SERIAL_NUMBER | awk '{ split($1,a,"=");print a[2] }'`
echo ${svcid}
Если я выполнить сценарий следующим образом, я получаю нет Выход
AxOS(7iq1) root:/mnt/ax/scratch/roshi# ./tmp.sh
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
Если я выполнить сценарий, как (первый предложенный Doon)
AxOS(7iq1) root:/mnt/ax/scratch/roshi# . ./tmp.sh
7iq1
AxOS(7iq1) root:/mnt/ax/scratch/roshi#
Пожалуйста, пост (маленький) пример – Useless
обычно при запуске сценария он работает в подоболочках. поэтому после его выхода все изменения теряются. Чтобы запустить его в текущей оболочке, запустите его как '. script.sh', и он будет запущен в текущей оболочке. это исправляет проблему? иначе как @Useless сказал, например, пожалуйста, – Doon
@Doon: Это исправило это. Но я смущен, почему. Я думал. был синонимом источника данного файла. Думаю, это имеет смысл. Исходный файл, начинающийся с #!/Bin/bash, запускает скрипт. Имеет ли это смысл? –