Я просто пишу простой 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
правильный?Ответы:
Изменения переменных среды в скрипте влияют только на вызывающую оболочку, если вы вызываете скрипт следующим образом:
Или же:
Не:
Или же:
Это связано с тем, что первые два способа запускают сценарий в текущей оболочке, а два последних запускают подоболочку, а изменения переменных среды не распространяются вверх из подоболочек.
источник
! /bin/bash
. Разве это не должно быть#!/bin/bash
? То, что вы говорите, правильно, но, похоже, у этого скрипта есть несколько проблем.! /bin/bash
будет работатьbash
и отрицать свой статус выхода. Эта новая оболочка на первый взгляд может быть неотличима от старой. ОП может подумать, что все было получено, и попробоватьecho $r
; он вернет пустую строку, как будто ваше решение ничего не изменило.export r=1
будет получен в старой оболочке только после выхода из новой оболочки.