我正在尝试编写一个 macOS shell 脚本,它可以使用默认打印机的描述(友好名称)作为变量。我已经做到了这一点:
#!/bin/bash
default_printer_info=$(lpstat -d)
printer_name=$(echo "$default_printer_info" | awk '{print $4}')
lpstat -l -p | awk 'c&&!--c;/'"$printer_name"'/{c=4}' | grep Description: | cut -d " " -f2-
这不起作用 - 尽管如果我手动将变量的内容输入$printer_name
到awk
字符串中(例如,PDFwriter
),这些命令中的最后一个可以正常工作。
谁能帮忙将$printer_name
变量放入字符串中awk
?我尝试过各种组合awk -v VAR="$printer_name" ...
和类似的努力,但没有成功。
编辑:根据要求,这里是输出lpstat -d
:
system default destination: Edward_Maine_LaserJet_400_MFP_M425dn
和来自lpstat -l -p
:
printer Edward_Maine_LaserJet_400_MFP_M425dn is idle. enabled since Thu Dec 21 15:53:40 2023
Form mounted:
Content types: any
Printer types: unknown
Description: Edward Maine LaserJet 400 MFP M425dn
Alerts: none
Location:
Connection: direct
Interface: /private/etc/cups/ppd/Edward_Maine_LaserJet_400_MFP_M425dn.ppd
On fault: no alert
After fault: continue
Users allowed:
(all)
Forms allowed:
(none)
Banner required
Charset sets:
(none)
Default pitch:
Default page size:
Default port settings:
printer HP_LaserJet_P3010_Series is idle. enabled since Thu Dec 21 12:46:40 2023
Form mounted:
Content types: any
Printer types: unknown
Description: Edward LaserJet P3015
Alerts: none
Location:
Connection: direct
Interface: /private/etc/cups/ppd/HP_LaserJet_P3010_Series.ppd
On fault: no alert
After fault: continue
Users allowed:
(all)
Forms allowed:
(none)
Banner required
Charset sets:
(none)
Default pitch:
Default page size:
Default port settings:
第二次编辑:预期输出是:
Edward Maine LaserJet 400 MFP M425dn
请参阅下面的评论。当我在系统设置中设置不同的默认打印机后,macOS Sonoma 似乎给出了空输出,但在我切换回来后却给出了正确的输出。我面临的问题似乎是在 macOS 中。
如果我们将
lpstat
命令组合成lpstat -dlp
(orlpstat -d -l -p
),并确保列出第-d
一个,OP 的输出应如下所示:注意:我已将 OP 的
lpstat
输出放入文件中lpstat.dlp
一种
awk
方法:注意: OP 将替换
<(cat lpstat.dlp)
为<(lpstat -dlp)
这会生成:
您可以通过一个命令来完成此操作,如下所示:
使用任何 awk:
您也许可以替换
{ lpstat -d; lpstat -l -p; }
为lpstat -dlp
.