Индикатор хода Zenity влияет на переменные

Другая проблема может быть неудачной apt-get update. После удаления неправильных источников и запуска apt-get update, я получил свой автозаполненный файл.

1
задан 3 December 2013 в 10:33

1 ответ

Замена процесса может помешать созданию раздражающих подоболочек, но синтаксис немного странный:

$ k=0; for x in a b; do ((k++)); done | zenity --progress; echo "$k"

→ 0 (не в порядке)

$ k=0; for x in a b; do ((k++)); done > >(zenity --progress); echo "$k"

→ 2 ( OK)

Что мне нравится в этом, так это то, что вам вообще не нужно сильно изменять свой скрипт, чтобы он работал правильно. Однако некоторые экзотические оболочки могут не хватать этой функции. Для Bash проверьте раздел «Замена процесса» в руководстве.

С кодом, близким к примеру из начального вопроса:

  i=0
  p=0

  while [ $i -lt 10 ]
  do
        i=$[$i + 1]
        echo $((10 * i))
        sleep 0.1
        p=$[$p + 1]
  done > >(zenity --progress --title="test" --text="test")
  echo "i: $i p: $p"

(Я добавил сон к сделайте прогресс более заметным, и я эхо десять раз i, чтобы иметь 100 при достижении конца цикла.)

1
ответ дан 24 May 2018 в 14:38
  • 1
    Вы можете добавить sleep 1; после каждого экземпляра ((k++)); и заметить, что индикатор выполнения фактически не прогрессирует. Он начинается с нуля и заканчивается тем, что не показывает никаких шагов между ними. – WinEunuuchs2Unix 12 May 2018 в 18:44
  • 2
    @ WinEunuuchs2Unix Это потому, что мой пример не очень хорош, так как он даже не пытается выводить номер прогресса на стандартный вывод цикла. Попробуйте запустить a=0; for p in 33 67 100; do a=1; sleep 1; echo "$p"; done > >(zenity --progress --auto-close --auto-kill); echo "$a", и вы должны работать как с индикатором выполнения, так и с сохраненным изменением на a. Я действительно использовал эту технику - это персональный скрипт сразу после того, как я предложил его здесь. – Alice M. 13 May 2018 в 20:49
  • 3
    Это потрясающая Алиса! +1. Могу ли я предложить вам включить новый код в свой ответ, чтобы люди могли легко скопировать и вставить его в свой терминал? – WinEunuuchs2Unix 13 May 2018 в 21:01
  • 4
    Я добавил пример, используя код исходного вопроса. Спасибо, что сделал меня менее ленивым. – Alice M. 14 May 2018 в 15:58

Другие вопросы по тегам:

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