Bash Функции | обновление переменных без отображения в терминале - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть функция freespace_function, я использую эту функцию для обновления переменной $ free_disk_space во время выполнения скрипта. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я вызываю функцию в моем скрипте, она отображает значение в терминале. Я не могу удалить эхо в функции, иначе у него нулевой выход. Я просто хочу, чтобы функция выполнялась без предупреждения (обновляла пространство free_disk_space), не выдавая вывод в терминале.

freespace_function () { 
    local function_result="$(df -m "${destination}" | tail -1 | awk '{print $4}')"
    echo "${function_result}"
    free_disk_space=$(freespace_function)
}

# inner loop
          while [[ "${free_disk_space}" -lt "${source_size}" ]] ; do
                echo "${free_disk_space} MB is not enough free space" 
                read -r -n 1 -p "please create free disk space to continue..." 
                freespace_function
                if [[ "${free_disk_space}" -gt "${source_size}" ]] ; then   
                    # breaks out of the inner loop when the if free space condition is true
                    break
                fi  
          done

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

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

freespace_function () {
    # it's a better practice to explicitly pass parameters to functions instead of relying on globals
    local destination=$1
    echo "$(df -m ${destination} | tail -1 | awk '{print $4}')"
}

# re-evaluates but won't print 
# notice that the condition is evaluating on the result of a sub-shell instead of a variable
while [[ "$(freespace_function /tmp/dir)" -lt "${source_size}" ]] ; do
      echo "${free_disk_space} MB is not enough free space"
      read -r -n 1 -p "please create free disk space to continue..."

      # no need to explicitly break out of the loop
done
0 голосов
/ 15 апреля 2020

Вы должны использовать > /dev/null. Перенаправляет вывод на /dev/null. /dev/null принимает весь вывод и ничего с ним не делает.

Итак, ваш код должен быть:

freespace_function () { 

    local function_result="$(df -m "${destination}" | tail -1 | awk '{print $4}')"

    echo "${function_result}"

    free_disk_space=$(freespace_function)
}


# inner loop

          while [[ "${free_disk_space}" -lt "${source_size}" ]] ; do


                echo "${free_disk_space} MB is not enough free space" 

                read -r -n 1 -p "please create free disk space to continue..." 

                freespace_function > /dev/null

                if [[ "${free_disk_space}" -gt "${source_size}" ]] ; then   

                    # breaks out of the inner loop when the if free space condition is true

                    break
                fi  
          done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...