Чому мій простий скрипт bash не працює?


1

Я просто пишу простий сценарій Bash на CentOS 6.2:

[root@hadoop1 ~]# vi bash_startup

#! /bin/bash
export r=1

Резервне копіювання до командного рядка: та запуску за допомогою ./bash_startup

[root@hadoop1 ~]# echo $r

[root@hadoop1 ~]#

відлуння не $rдає мені результату, чому?


Що відбувається у вашому сценарії, якщо ви змінили ! /bin/bash(що невірно) на #!/bin/bashправильний?
JakeGould

Відповіді:


3

Зміни змінних оточуючих середовищ у скрипті впливають лише на оболонку виклику, якщо ви викликаєте сценарій на зразок:

. ./script.sh

Або:

source ./script.sh

Не:

bash ./script.sh

Або:

./script.sh

Це пояснюється тим, що перші два способи запускають скрипт у поточній оболонці, в той час як останні два запускають підшару, а зміни змінної середовища не розповсюджуються вгору поза підшлубками.


Що з цього приводу ! /bin/bash. Чи не повинно бути це #!/bin/bash? Те, що ви говорите, правильно, але, схоже, у цього сценарію є кілька питань.
JakeGould

1
@JakeGould Хоча це теж насправді неправильно, я не думаю, що це стосується проблеми, про яку задається ОП.
Джозеф Сібл

1
Досить актуально. ! /bin/bashзапустить bashі скасує свій статус виходу. Ця нова оболонка може бути невідмінна від старої (джерельної) на перший погляд. ОП може подумати, що все було знайдено і спробувати echo $r; він поверне порожній рядок, ніби ваше рішення нічого не змінило. export r=1буде розміщено у старій оболонці лише після виходу з нової оболонки.
Каміль Маціоровський

1
@Mat У відповіді прямо сказано, що ви повинні створити файл, а не запускати його.
Каміль Маціоровський

1
Ви спробували точні дві команди, за якими я сказав, що не вийде.
Джозеф Сибл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.