Как получить доступ к переменной Bash из другой функции? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть функция Bash, которая содержит переменную, к которой мне нужно обратиться из другой функции.Как мне это сделать?

Вот пример:

#!/bin/bash 

function run_query() {
    sleep 5
    local -g DATA=$(curl "http://api.dictionary.words/?definition=program")
}

function display_data() {
    printf "%s\n" "$DATA"
}

run_query &
display_data

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Первая функция запускается каждые 5 секунд, а вторая функция - каждую секунду, потому что я не хотел запрашивать API каждую секунду.

Затем вы можете запрашивать каждые 5 секунд

i=0
while :
do
    ((i++ % 5 == 0)) && data=$(curl "http://api.dictionary.words/?definition=program")
    printf '%s\n' "$data"
    sleep 1
done
0 голосов
/ 01 марта 2019

Так что я считаю, что вы запускаете run_query в качестве фонового процесса, в подоболочке с &.Таким образом, данные run_query и отображения не запускаются в одной и той же оболочке, поэтому они не могут получить доступ к переменным друг друга.

Просто что-то попробовать,

Вызовите display_data из run_query ()

function display_data() {
    printf("%s\n" "$1")
}
export -f display_data 
function run_query() {
    sleep 5
    DATA="$(curl "some_url" --someoptions)"
    display_data "$DATA"
}
export -f run_query
...