Вот еще несколько возможных решений:
Даже 2,5 года спустя это по-прежнему является проблемой с системами Fedora, Redhat и Debian ... По сути, Gnome 3 выполняет проверку драйвера 3D-графики при запуске gnome-session, что приводит к сбою vncserver, когда НЕ используется Vino; Итак, используйте другой диспетчер рабочего стола. В качестве альтернативы вы используете Vino, а затем вам потребуется либо использовать TLS типа 18 и несколько совместимых программ просмотра VNC, либо отключить шифрование и легко перехватить весь ваш трафик; Итак, отключите шифрование и используйте туннель SSH.
Это запутанная проблема, для решения которой требуется координация нескольких групп разработчиков, и в ней был достигнут очень небольшой прогресс.
Могу только предположить, что это вопрос домашнего задания.
Давайте разберем это. Во-первых, у вас есть цикл, который начинается с $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
.
Бит 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
недалеко от этого.