Чтобы получить список вы можете использовать:
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 ' '
кошка + 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
lpq
работает тоже.