lsusb 出了什么问题 | awk '{print $6}' | xargs --null lsusb -s

问题描述 投票:0回答:1

命令 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 得到完整的列表输出。我错了。列表输出的每个元素之间是否缺少换行符?

linux bash xargs
1个回答
0
投票

几个问题。您使用

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
© www.soinside.com 2019 - 2024. All rights reserved.