Функция bash -Получить стандартное значение функции внутри переменной и изменить переменные вне функции

Существуют методы, специально не задокументированные для Kali, которые работают для Arch и Debian . Однако, поскольку у вас есть Debian, а Debian является основой Kali , вы можете добавить пакеты в свою установку Debian, чтобы она могла делать то, что делает Kali, включая загрузку, сборку и установка ядра Kali .

0
31.01.2020, 16:33
2 ответа

Вот мое "грязное" решение... =D

ПРИМЕЧАНИЕ:Как я уже сказал, моя реальная функция огромна, поэтому я хотел бы сохранить выходные данные этой функции(echoв основном )в файле журнала, который генерируется с записью в F_MY_FUNC_OP. Помимо этого, моя схема регистрации использует F_MY_FUNC_OPи состоит из множества устаревших компонентов.

VAL_A="none"
VAL_B="none"
f_my_func() {
    echo "$(date)"
    VAL_A="some value"
    VAL_B="some value"
}
f_my_func > f_my_func_op 2>&1
F_MY_FUNC_OP=$(cat f_my_func_op)
rm -f "f_my_func_op"
echo "$F_MY_FUNC_OP"
echo "$VAL_A"
echo "$VAL_B"

Таким образом, я могу выполнить функцию и перенаправить ее stderr и stdout в файл, в то же время я разрешаю манипулирование переменными, внешними по отношению к функции (случай "$VAL _A" и "$ VAL _B" ), иначе ("F _MY _FUNC _OP=$ (f _my _func )" или "F _MY _FUNC _OP= `f _my _func `", например )функция будет выполняться в "подоболочке" и манипулирование этими переменными будет невозможно.

Спасибо @jesse _b, @AdminBee и @Isaac! =D

0
28.04.2021, 23:25

Фундаментальным правилом оболочки является то, что суб-оболочка не может изменять ни свои родительские переменные, ни окружение. Это правило влияет на выполнение функции внутри подпрограммы -оболочки $(f_my_func), и родительские переменные VAL _A и VAL _B не изменяются.

Если вам нужно изменить родительские переменные в функции, то не захватывайте вывод функции, сделайте вывод какой-либо другой переменной:

VAL_A="none"
VAL_B="none"
f_my_func() {
    nl=$'\n'
    F_MY_FUNC_R="some info some info some info some info some info $nl"
    F_MY_FUNC_R+="some info some info some info some info some info $nl"
    F_MY_FUNC_R+="some info some info some info some info some info $nl"
    F_MY_FUNC_R+="some info some info some info some info some info "
    VAL_A="some value"
    VAL_B="some value"
}
f_my_func
echo "$F_MY_FUNC_R"
echo "$VAL_A"
echo "$VAL_B"
2
28.04.2021, 23:25

Теги

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