55

На странице руководства lpr сказано, что целевой принтер может быть указан с помощью флага -P .

-P destination[/instance]
    Prints files to the named printer.

Я «добавил» различные принтеры в локальные ресурсы Samba, используя графический интерфейс в Ubuntu/Gnome. Как я могу получить список этих доступных принтеров в формате, который ожидает флаг -P (предпочтительно из оболочки bash)?

2 ответа2

86
$ lpstat -p -d

Из руководства CUPS.

12

Чтобы получить список вы можете использовать:

lpstat -a

или же

cat /etc/printcap

Чтобы распечатать только имена принтеров:

lpstat + read + array:

$ while read l; do l=($l); echo "${l[0]}"; done <<< "$(lpstat -a)"

lpstat + awk:

$ lpstat -a | awk '{print $1}'

lpstat + cut:

$ lpstat -a | cut -f1 -d ' '

cat + grep + вырезать в /etc/printcap:

$ cat /etc/printcap | cut -f1 -d'|' | grep '^#' -v

Вот что показано, по одному на строку:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Я чувствую, что решения lpstat более элегантны и надежны. Главным образом потому, что /etc/printcap не был найден в некоторых системах, которые я тестировал.

Использование awk или cut зависит от того, что вы установили и предпочитаете. Опция bash read + bash array должна работать на любой оболочке bash без необходимости внешних операций.

РЕДАКТИРОВАТЬ: Я сказал, что отмеченное решение не работает для меня на Amazon Linux. Но я думаю, это работает, если вы просто хотите скопировать имена принтеров из середины остальной части вывода. Работает так же, как использование только lpstat -a .

$ lpstat -p -d
printer HP_Deskjet_2540_series is idle. enabled since Tue 22 Dec 2015 01:12:10 PM BRST
. . .
printer GCP-Save_to_Google_Docs is idle. enabled since Tue 15 Dec 2015 02:13:33 AM BRST
system default destination: HP_LaserJet_P1606dn

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .