Если вы измените переменную окружения в другой оболочке, изменится ли она или останется такой же в других оболочках?

Проверить сложно, так как вы указали возможные совпадения только за один год, но

awk 'NR==FNR{c[$1$2]=$4; next} ($1$2 in c) {$3 = sprintf("%03d", $3 + c[$1$2])} {print $1, $3, $4, $5}' file2 file1
1980 001 0100 3.3
1982 11 0400 2.2
1985 04 0700 1.7
1995 31 1000 2.2
1
09.09.2017, 00:32
2 ответа

Вот практический эксперимент, который делает именно то, о чем вы спрашивали; он запускает bash, устанавливает переменную среды, затем запускает tcshи меняет ее значение. Затем он проверяет значение в bash.

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

tcsh -c 'echo $SPORT; setenv SPORT archery; echo $SPORT'

printf 'SPORT is "%s"\n' "$SPORT"

Выполнение этого сценария bash, который вызывает tcsh, приведет к

SPORT is "baseball"
baseball
archery
SPORT is "baseball"

Но нам даже не нужно переключаться на tcsh, чтобы увидеть это в действия, достаточно ввести подоболочку, которая имеет отдельную среду, с (...)в нашем сценарии bash:

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

(
    echo "$SPORT"
    export SPORT=archery
    echo "$SPORT"
)

printf 'SPORT is "%s"\n' "$SPORT"

Вывод останется прежним.

Одна среда не может влиять на другую за одним исключением: новая среда наследует переменные среды от родительской среды. Подоболочка (как в последнем примере) также наследует неэкспортированные переменные оболочки.

3
27.01.2020, 23:16

Переменные среды означают не это. «Окружающая среда» специфична для процесса. Он может (или не может )быть унаследован другими процессами, ответвленными от этого процесса, в зависимости от различных факторов. Изменение среды запущенного процесса никогда не повлияет на другие запущенные процессы.*

Прочтите, что означают переменные окружения, в спецификациях POSIX . (И поймите, что этот документ предназначен для разработчиков , а не для пользователей.)

*или, по крайней мере, для того, чтобы придумать исключение, потребуются очень хорошие навыки кодирования на низком -уровне. Я не знаю, возможно ли это в C; возможно с общей памятью. Но этого бы не произошло, если бы они не были специально спроектированы таким образом.

3
27.01.2020, 23:16

Теги

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