Как контролировать цикл for?

FWIW, у меня была такая же проблема с принтером этикеток Brother QL-1050 под Debian Sid. Это была не ошибка приложения, как предлагалось в комментариях, а проблема CUPS / драйвера. Вы можете подтвердить это, запустив lp или lpr и посмотреть, не повлияло ли оно на это тоже:

lp -d YOURPRINTER -n 2 /some/file.pdf
lpr -P YOURPRINTER -# 2 /some/file.pdf

Мне удалось решить проблему, отредактировав / usr / lib / cups / filter / brother_lpdwrapper_ql1050 и изменение строки

CUPSOPTION=`echo "$5 Copies=$4" | sed -e …

на

CUPSOPTION=`echo "$5" | sed -e …

( Copies = 1 также работает).

Я думаю, что количество копий было подано дважды.

Для вашего принтера должен быть аналогичный файл, и хотя я предполагаю, что имя и определение CUPSOPTION могут отличаться, эти параметры, вероятно, там определены.

2
26.04.2017, 23:26
2 ответа

Используйте следующий скрипт bash (чтобы заснуть на 10 секунд между каждыми 10 "эхо"):

test.sh — тестовое имя скрипта

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

Использование :

bash test.sh test_file

while ((++i)) - будет увеличивать счетчик i каждый раз, когда read -r строка возвращает строку из input

if (( "$i" % 10 == 0)) - проверяет, делится ли текущий номер строки i на 10 (означает, что поток выполнения достигает следующих 10 строк)

sleep 10 - приостанавливает выполнение скрипта на 10 секунд

6
27.01.2020, 21:56
xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

Работа

  • xargs с -L займет 10 строк за один раз и передаст их команде sh -c. Там первый аргумент используется как имя программы, мы поместим фиктивное имя sh. Затем эти 10 строк будут доступны для sh как "$@", и мы сможем делать с ними все, что захотим. Здесь мы просто печатаем их. Затем мы засыпаем на 10 секунд. После этого xargs должны пройти следующие 10 траншей, и этот цикл повторяется до тех пор, пока не закончатся лжи в test_file.
-1
27.01.2020, 21:56

Теги

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