Область действия переменной сценария оболочки

#linux #bash #shell #sh

#linux #bash #оболочка #sh

Вопрос:

У нас есть два сценария оболочки (A и B), работающих параллельно на одной и той же машине Linux. Вот код скрипта A

 #!/bin/bash
MY_VAR=Hello
// Script Code run for 5-10 seconds
  

Вот сценарий B

 #!/bin/bash
MY_VAR=HI
// Script Code run for 5-10 seconds
  

Какова будет область действия переменной MY_VAR, если оба скрипта выполняются параллельно?

Например, если мы запустим скрипт A, и пока скрипт A выполняется, мы запустим скрипт B. Изменится ли значение MY_VAR в скрипте B, также измените его для скрипта A (где бы мы ни обращались к нему в скрипте A)

Комментарии:

1. К счастью, переменная bash привязана к одному процессу. Несколько процессов bash имеют свой собственный набор переменных. Представьте, какой хаос вы могли бы учинить, если бы оболочки делились своей переменной? Вы можете испортить любой сценарий оболочки, который выполняется в данный момент, манипулируя переменными, которые он использует.

Ответ №1:

Область действия каждой переменной находится только в пределах соответствующего скрипта. В описанном вами случае утечки за пределы скрипта нет. Между сценариями нет помех. Даже если вы EXPORT используете переменную, эффекта нет.

Пример:

 ==> test1.sh <==
#!/usr/bin/env bash

echo "${MY_VAR} in 1"
export MY_VAR=Hello

for i in `seq 1 10` ; do
    echo "${MY_VAR} in 1"
    sleep 5
done

==> test2.sh <==
#!/usr/bin/env bash

echo "${MY_VAR} in 2"
export MY_VAR=Hi

for i in `seq 1 10` ; do
    echo "${MY_VAR} in 2"
    sleep 5
done
  

Запустите скрипты:

 ./test1.sh amp; ; sleep 10; ./test2.sh amp;
 in 1
Hello in 1
Hello in 1
 in 2
Hi in 2
Hello in 1
Hi in 2
Hello in 1
Hi in 2
Hello in 1
Hi in 2
Hello in 1
Hi in 2
  

Комментарии:

1. Под утечкой я подразумеваю случай, когда переменная, определенная в одной области, влияет на переменную с тем же именем в другой области. В описанном вами случае переменная в скрипте A не влияет на переменную с тем же именем в скрипте B.