Làm thế nào để liệt kê tên máy in được chấp nhận để sử dụng với lpr?


64

Các lprtrang người đàn ông cho biết một máy in đích có thể được xác định với -Pcờ.

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

Tôi đã 'thêm' các máy in khác nhau trên các chia sẻ Samba cục bộ bằng GUI trong Ubuntu / Gnome. Làm cách nào tôi có thể nhận được danh sách các máy in có sẵn này ở định dạng mà -Pcờ mong đợi (tốt nhất là từ vỏ bash)?

Câu trả lời:



12

Để có được một danh sách bạn có thể sử dụng:

lpstat -a

hoặc là

cat /etc/printcap

Để chỉ in tên máy in:

lpstat + đọc + mảng:

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

lpstat + awk:

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

lpstat + cắt:

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

mèo + grep + cắt trong /etc/printcap:

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

Đây là những gì được hiển thị, một trên mỗi dòng:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Tôi cảm thấy như các lpstatgiải pháp là thanh lịch và đáng tin cậy hơn. Chủ yếu là vì /etc/printcapkhông tìm thấy trên một số hệ thống tôi đã thử nghiệm.

Về việc sử dụng awkhoặc cut, phụ thuộc vào những gì bạn đã cài đặt và thích. Tùy chọn bash read + bash mảng sẽ hoạt động trên bất kỳ shell bash nào mà không cần bên ngoài.

EDIT: Tôi đã nói giải pháp được đánh dấu không hoạt động đối với tôi trên Amazon Linux. Nhưng tôi đoán nó hoạt động nếu bạn chỉ muốn sao chép tên máy in từ giữa phần còn lại của đầu ra. Hoạt động tương tự như chỉ sử dụng 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

lpstat + cut cũng sẽ hoạt động trên OS X.
tresf 22/03/2016

Theo mẫu đầu ra của bạn, lpstat -p -ddường như hoạt động được
Skippy le Grand Gourou

Xin lỗi, nhưng anh ấy hỏi How can I get a list of these available printers in the format that the (lpr) -P flag expects. Ví dụ của tôi lpstat -p -dcho thấy rõ ràng rằng bạn nhận được nhiều hơn chỉ là tên máy in với điều đó. Trong trường hợp đó, bạn không thể sử dụng đầu ra đó cho một lpr -P $PRINTERNAMEcuộc gọi. Vì vậy, không! lpstat -p -dkhông hoạt động trong ví dụ tôi đã đưa ra.
Gus Neves
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.