Para obter uma lista, você pode usar:
lpstat -a
ou
cat /etc/printcap
Para imprimir apenas os nomes da impressora:
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 ' '
gato + grep + corte em /etc/printcap
:
$ cat /etc/printcap | cut -f1 -d'|' | grep '^#' -v
Isto é o que é mostrado, um por linha:
HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs
Sinto que as lpstat
soluções são mais elegantes e confiáveis. Principalmente porque /etc/printcap
não foi encontrado em alguns sistemas que testei.
O uso de awk
ou cut
depende do que você instalou e prefere. A opção bash read + bash array deve funcionar em qualquer shell bash sem a necessidade de externos.
Edição: Eu disse que a solução marcada não funciona para mim no Amazon Linux. Mas acho que funciona se você quiser apenas copiar os nomes das impressoras do meio do restante da saída. Funciona da mesma forma que usar apenas 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
funciona também.