Как сделать переменную доступной в родительской оболочке после выполнения - PullRequest
0 голосов
/ 06 сентября 2018

Ниже приведен упрощенный сценарий оболочки a.sh: -

function init(){
    export aData="Data of a"
    echo "init of a"
}

function execute(){
    init
    echo "execute of a >$aData<"
}

$@

, и этот сценарий оболочки вызывается с псевдонимом ниже: -

alias ae="sh a.sh execute"

выполнение ae дает следующий результат: -

инициализация

выполнения> данных <</p>

После завершения выполнения.Теперь доступ к aData из того же терминала не дает результатов: -

echo $aData

ничего не печатает, даже если aData экспортируется в методе init.

Требуется доступ к $ aData послеВыполнение метода execute для a.sh, но доступ для инициализации и выполнения метода не должен быть доступен.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 06 сентября 2018

Вместо этого вы можете использовать source встроенную команду:

ваш a.sh должен выглядеть так:

function init(){
export aData="Data of a"
echo "init of a"
}

function execute(){
    init
    echo "execute of a >$aData<"
}

и вы можете вызвать функцию execute таким образом в оболочке sh:

alias ae=". a.sh; execute"

или внутри оболочки bash псевдоним ae = "источник a.sh; выполнить"

Помните, что все функции, определенные в a.sh, будут определены в родительской оболочке (например, init, execute, ...). Чтобы избежать такой ситуации (которая может привести к конфликту имен функций), вы можете использовать следующий скрипт t2.sh:

case "$1" in
    execute)
        export aData="Data of a"
        echo "init of a"
        ;;
    anyother_command_to_exec)
        # code
        ;;
    *);;
esac

и выполните команду

alias ae2=". a2.sh execute"
...