У меня есть один сценарий оболочки, который вызывает другой с помощью sudo, например:
test1.sh:
#! /bin/sh
echo "In test1"
UVAR=bar
echo "UVAR=${UVAR}"
sudo ./test2.sh
echo "In test1 - after call to test2"
echo "UVAR=${UVAR}"
и test2.sh:
#! /bin/sh
echo "In test2"
whoami
echo "UVAR=${UVAR}"
UVAR=baz
echo "UVAR=${UVAR}"
echo "leaving test2"
Я могу сделать отдельные переменные из test1.sh
(например, UVAR
) доступными в test2.sh
, поставив UVAR=$UVAR
перед вызовом sudo
, но что, если я хочу, чтобы это было для все переменные? Явное именование всех переменных в вызове test2.sh
становится непрактичным (тем более, что у меня нет прямого контроля над тем, какие переменные могут присутствовать на практике). Если бы я не позвонил test2.sh
с sudo
(это необходимо в реальной проблеме), я мог бы просто набрать test2.sh
.
Дополнительный бонус - это способ, который позволяет мне защитить test1.sh
от изменений переменных, сделанных в test2.sh
, т.е. в примере вторая строка, выводящая UVAR
в test1.sh
, должна дать тот же результат, что и первый.
(я отмечаю это с помощью bash, так как в настоящее время скрипты используют bash, но если это можно будет решить с помощью какой-либо другой оболочки, мне будет интересно узнать, и требуются ли лишь незначительные изменения в сценариях можно подумать о замене bash чем-то другим)