Вывод текста во время функции завершения bash

-zв оболочке не будет указано, является ли значение целым или нет, а будет ли его длина > 0.

Вы можете сделать то же самое в awk с помощьюlength--if(length($1))...

Если вы хотите проверить, является ли переменная или поле числом или нет в awk, вы можете сделать это:

 if($1+0 || $1~/^[+-]?0/)...

Ваше выражение if(-z $1)просто инвертирует неустановленную переменную z, что даст 0, а затем добавит 0к полю $1, создав непустую -строку, которая будет всегда считается TRUE, , даже если$1была пустой строкой ""или числом 0.

0
22.01.2021, 09:18
2 ответа

Немного поигравшись, я нашел кое-что, что работает. По сути, идея состоит в том, чтобы вернуть текст, который вы пишете, написать пробелы над ними, а затем вернуться назад над теми, (escape \bтолько перемещает курсор, а не удаляет ).

Я думаю, именно поэтому такие приложения, как gcloud, отображают один символ вместо текста. Я не хотел анимировать что-то в Bash и не видел ни одного хорошего символа, который мог бы представлять загрузку, поэтому я сделал следующее:

# \e[2m = dim, \e[0m = reset
echo -ne "\e[2mLoading...\e[0m"

# do the slow thing...

# same number of `\b` and ` ` as "Loading..."
echo -ne "\b\b\b\b\b\b\b\b\b\b          \b\b\b\b\b\b\b\b\b\b"

Не обнаружил никаких проблем, кроме уродливого кода.

0
18.03.2021, 22:35

Вот небольшая анимация:

animation() {
  tput civis
  while true; do
    for i in {1..3}; do
      echo -ne "."
      sleep 1
    done
    for i in {1..3}; do
      echo -ne "\b \b"
      sleep 1
    done
  done
  tput civvis
}

kill_animation() {
  kill $anim
  echo
}

echo -n "Loading" && animation & anim=$!

sleep 10

kill_animation

Результат такой:

enter image description here

2
18.03.2021, 22:35

Теги

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