Почему массив bash остается пустым, если я передаю результат цикла for, использованного для его заполнения, в прогресс zenity --?

У меня были похожие проблемы. Для меня мне пришлось скачать какую-то другую прошивку, которую можно было загрузить.

Проверьте выводdmesg | grep firmware

У меня было что-то вроде:

b43-phy0 ERROR: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.

Итак, я проверил старую документацию (, особенно эту часть :" Если вы используете драйвер b43 из ядра 3.2 или новее:"):http://linuxwireless.sipsolutions.net/en/users/Drivers/b43/

Используя описанные здесь шаги, но используя более новую версию микропрограммы из:http://www.lwfinger.com/b43-firmware/

Затем запустите modprobe b43для перезагрузки драйвера.

Запустив ip link, я получил интерфейс wlan0.

Удачи!

0
14.11.2021, 18:47
2 ответа

Возможно, это не самое элегантное решение, но оно работает.

Он полагается на tee, чтобы выходные данные цикла записывались в файл и одновременно передавались в zenity.

Используя приведенный выше фиктивный код, он становится:

array1=( AAA BBB CCC DDD )

curl_cmd() {
  curl -s "https://hub.dummyapis.com/products?noofRecords=4&idStarts=1001&useless=$1" | jq.[$2].id | bc
}

i=0
prog=0

for c in ${array1[@]}; do
  #updates the text
  echo $prog
  #updates the percentage
  echo "# $c"

  #echo the data I'm interested in, 
  #with a @ for later reference
  echo "@ $(curl_cmd $c $i)" 

  (( prog=prog+30 ))
  (( i++ ))
done | tee >(zenity \
    --progress \
    --title="Title" \
    --text="Text" \
    --percentage=0 \
    --auto-close \
    --auto-kill) > /tmp/so-q

data_array=( $(grep @ /tmp/so-q | cut -c 2-) )

Теперь data_arrayнаконец заполнено

~ $ echo ${data_array[@]}
1001 1002 1003 1004
0
15.11.2021, 14:56

Другая возможность :Замените в первом примере

data_array[$i]=$(curl... | jq... | bc)

с

curl... | jq... | bc >> /tmp/so-q

и добавьте после кода:

mapfile -t data_array < /tmp/so-q
rm /tmp/so-q
declare -p data_array

Для создания безопасных временных файлов можно использовать mktemp. См. man mktemp.

1
15.11.2021, 16:40

Теги

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