Ответы:
Изменения переменных среды в скрипте влияют только на вызывающую оболочку, если вы вызываете скрипт следующим образом:
. ./script.sh
Или же:
source ./script.sh
Не:
bash ./script.sh
Или же:
./script.sh
Это связано с тем, что первые два способа запускают сценарий в текущей оболочке, а два последних запускают подоболочку, а изменения переменных среды не распространяются вверх из подоболочек.
! /bin/bash
. Разве это не должно быть #!/bin/bash
? То, что вы говорите, правильно, но, похоже, у этого скрипта есть несколько проблем.
! /bin/bash
будет работать bash
и отрицать свой статус выхода. Эта новая оболочка на первый взгляд может быть неотличима от старой. ОП может подумать, что все было получено, и попробовать echo $r
; он вернет пустую строку, как будто ваше решение ничего не изменило. export r=1
будет получен в старой оболочке только после выхода из новой оболочки.
! /bin/bash
(что неверно) на#!/bin/bash
правильный?