Глобальные переменные среды в сценарии оболочки

Посмотрите здесь для хорошего ответа:

лучший способ разрешить имя пользователя дисплея SID?

суть его является этим битом:

string sid="S-1-5-21-789336058-507921405-854245398-9938";
string account = new System.Security.Principal.SecurityIdentifier(sid).Translate(typeof(System.Security.Principal.NTAccount)).ToString();

Этот подход работает на меня для нелокального SID по активному каталогу.

81
задан Benjamin W. 20 April 2017 в 20:48
поделиться

4 ответа

Запустите ваш сценарий с .

. myscript.sh

Это запустит сценарий в текущей среде оболочки.

export определяет, какие переменные будут доступны для новых процессов, поэтому если вы скажете

FOO=1
export BAR=2
./runScript.sh

, то $ BAR будет доступен в среде runScript.sh , но $ FOO не будет.

134
ответ дан 24 November 2019 в 09:32
поделиться

Когда вы запускаете сценарий оболочки, это делается во вспомогательной оболочке, поэтому он не может повлиять на среду родительской оболочки. Вы хотите создать сценарий, выполнив:

. ./setfoo.sh

Это выполняет его в контексте текущей оболочки, а не как sub оболочку.

На странице руководства bash:

. имя_файла [аргументы]
исходное имя файла [аргументы]

Чтение и выполнение команд из имени файла в текущей оболочке среда и вернуть статус выхода последней выполненной команды от имени файла.

Если имя файла не содержит косой черты, имена файлов в PATH используются для найдите каталог, содержащий имя файла.

Файл, который искали в PATH, не обязательно должен быть исполняемым. Когда bash нет в режиме POSIX выполняется поиск текущего каталога, если файл не найден в PATH.

Если параметр sourcepath для встроенной команды shopt отключен, ПУТЬ не ищется.

Если предоставлены какие-либо аргументы, они становятся позиционными параметрами при выполнении имени файла.

В противном случае позиционные параметры не изменяются. Статус возврата это статус последней команды, выполненной в сценарии (0, если нет команды выполняются) и false, если имя файла не найдено или не может быть прочитанным.

52
ответ дан 24 November 2019 в 09:32
поделиться
FOO=bar
export FOO
-3
ответ дан 24 November 2019 в 09:32
поделиться
#!/bin/bash
export FOO=bar

или

#!/bin/bash
FOO=bar
export FOO

man export:

Оболочка должна присвоить атрибут экспорта переменным, соответствующим указанным именам, что приведет к их размещению в окружение последовательно выполняемых команд. Если за именем переменной следует = word, тогда значение этой переменной должно быть установлено в word.

4
ответ дан 24 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

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