Почему мой простой скрипт bash не запущен?

341
Mat

Я просто пишу простой Bash-скрипт на CentOS 6.2:

[root@hadoop1 ~]# vi bash_startup  #! /bin/bash export r=1 

Возвращение к командной строке: и запуск с использованием ./bash_startup

[root@hadoop1 ~]# echo $r  [root@hadoop1 ~]# 

эхо не $rдает мне результата, почему?

1
Что происходит в вашем скрипте, если вы измените `! / bin / bash` (что неверно) в `#! / bin / bash`, что верно? JakeGould 6 лет назад 0

1 ответ на вопрос

3
Joseph Sible

Изменения переменных среды в скрипте влияют только на вызывающую оболочку, если вы вызываете скрипт следующим образом:

. ./script.sh 

Или же:

source ./script.sh 

Не:

bash ./script.sh 

Или же:

./script.sh 

Это связано с тем, что первые два способа запускают скрипт в текущей оболочке, а два последних запускают подоболочку, а изменения переменных среды не распространяются вверх из подоболочек.

Как насчет этого? / Бен / bash`. Разве это не должен быть `#! / Bin / bash`? То, что вы говорите, правильно, но, похоже, у этого скрипта есть несколько проблем. JakeGould 6 лет назад 0
@JakeGould Хотя это действительно неправильно, я не думаю, что это имеет отношение к проблеме, о которой спрашивает OP. Joseph Sible 6 лет назад 1
Довольно актуально. `! / bin / bash` будет запускать `bash` и отменять свой статус выхода. Эта новая оболочка на первый взгляд может быть неотличима от старой. ОП может подумать, что все было получено, и попробовать `echo $ r`; он вернет пустую строку, как будто ваше решение ничего не изменило. `export r = 1` будет получен в старой оболочке только после выхода из новой оболочки. Kamil Maciorowski 6 лет назад 1
Я использую ./bash_startuo и установил файл bin bash, но все равно я не получаю значение для 'r' Mat 6 лет назад 0
@Mat В ответе явно сказано, что вы должны исходный файл, а не запускать его. Kamil Maciorowski 6 лет назад 1
что вы имеете в виду под источником? запуск с использованием 'bash ./bash_startup' также не дает мне никакого вывода. Mat 6 лет назад 0
Вы попробовали точно две команды, которые, как я сказал, не будут работать. Joseph Sible 6 лет назад 1
спасибо, решено. Mat 6 лет назад 0

Похожие вопросы