Відповіді:
Зміни змінних оточуючих середовищ у скрипті впливають лише на оболонку виклику, якщо ви викликаєте сценарій на зразок:
. ./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
правильний?