命令 1:
lsusb | awk '{print $6}'
输出1:
1d6b:0002
0627:0001
0627:0001
0627:0001
0409:55aa
46f4:0001
1d6b:0003
1d6b:0002
1d6b:0003
命令2:
lsusb | awk '{print $6}' | xargs
输出2:
1d6b:0002 0627:0001 0627:0001 0627:0001 0409:55aa 46f4:0001 1d6b:0003 1d6b:0002 1d6b:0003
但是命令3:
lsusb | awk '{print $6}' | xargs --null lsusb -s
输出3:
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU Tablet
命令 4:
lsusb | awk '{print $6}' | xargs --null lsusb -s
输出4:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
我期望命令 3 和命令 4 得到完整的列表输出。我错了。列表输出的每个元素之间是否缺少换行符?
几个问题。您使用
xargs --null
,而 awk
用换行符分隔输出。您使用 lsusb -s
,但您传递的是 vendor:product
规范,而不是 bus:device
。您可能应该使用 -n1
的 xargs
选项,因为 lsusb -s
仅接受一种 bus:devnum
规范。如果您想使用 vendor:product
规格,请尝试:
lsusb | awk '{print $6}' | xargs -n1 lsusb -d
(但某些输出可能会重复)。如果您想使用
bus:device
规格,请尝试:
lsusb | awk '{bd = $2 ":" $4; sub(/:$/, "", bd); print bd}' | xargs -n1 lsusb -s