Shell-Script Bash

Вот еще несколько возможных решений:

  1. Отключите шифрование Vino, а затем настройте туннель SSH
  2. Используйте клиент VNC, совместимый с версией TLS Vino: Android: bVNC Free, Windows: SSVNC, Linux: vinagre
  3. Используйте другой сервер VNC, такой как tigervnc или x11vnc
  4. Используйте другой сервер VNC, такой как tightvnc, с другим диспетчером рабочего стола, например MATE, Xfce, LXDE и т. Д.

Даже 2,5 года спустя это по-прежнему является проблемой с системами Fedora, Redhat и Debian ... По сути, Gnome 3 выполняет проверку драйвера 3D-графики при запуске gnome-session, что приводит к сбою vncserver, когда НЕ используется Vino; Итак, используйте другой диспетчер рабочего стола. В качестве альтернативы вы используете Vino, а затем вам потребуется либо использовать TLS типа 18 и несколько совместимых программ просмотра VNC, либо отключить шифрование и легко перехватить весь ваш трафик; Итак, отключите шифрование и используйте туннель SSH.

Это запутанная проблема, для решения которой требуется координация нескольких групп разработчиков, и в ней был достигнут очень небольшой прогресс.

1
11.12.2018, 17:55
2 ответа

Могу только предположить, что это вопрос домашнего задания.

Давайте разберем это. Во-первых, у вас есть цикл, который начинается с $1и увеличивается на $3и останавливается на 6. Итак, если вы передадите 2 10 4, цикл начнется с 2и увеличится на 4. Он немедленно остановится, потому что 2 + 4 = 6.

Таким образом, следующее просто напечатает 2. С аргументами 2 10 4.

for ((k=$1; $k<3 + 3 ; k=$k + $3))
do
    echo $k
done

Каждый раз в цикле вы обрабатываете вывод, используя gawk -v s=4 '{print $1*s}'. Это очень маленькая "awk" программа. Он устанавливает переменную s=4. Затем печатает $1*s(, т.е. :, вычисляет 2 * 4и просто печатает 8.

2
27.01.2020, 23:23

Бит awkпросто печатает текущее значение$k(это $1в коде awk, поскольку он считывается со входа )умножить на 4 (это значение awkпеременная s, установленная в командной строке ).

Короче было бы сделать

printf '%d\n' "$(( 4*k ))"

Цикл переходит от первого аргумента к 5 шагам третьего аргумента. Второй аргумент не имеет значения.

Таким образом, все можно упростить до

seq "$(( 4*$1 ))" "$(( 4*$3 ))" 20

Три аргумента GNU seq: «start , increment и end ». Это для выхода , и выход всегда будет в четыре раза больше текущего значения переменной цикла. Цикл начинается с $1, поэтому вывод начинается в четыре раза больше. Цикл увеличивается на $3, поэтому мы увеличиваем его в четыре раза. Цикл заканчивается на $kмаксимум на 5 (, на единицу меньше, чем 3+3), поэтому вывод заканчивается на 4*5.

Или, если вы хотите сделать этот вызов seqкак цикл bashвместо:

for (( k = 4*$1; k <= 20; k += 4*$3 )); do
    printf '%d\n' "$k"
done

И, как видите,

for (( k = $1; k <= 5; k += $3 )); do
    printf '%d\n' "$(( 4*k ))"
done

недалеко от этого.

1
27.01.2020, 23:23

Теги

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