我刚刚找到了这个命令:
upower -e
显示可用于upower -i
显示插入设备状态的文件列表。
所以我的第一次尝试是使用:
upower -e | xargs upower -i
但它不起作用。所以我试过:
$ upower -e | xargs echo
/org/freedesktop/UPower/devices/line_power_AC /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/line_power_ucsi_source_psy_USBC000o001 /org/freedesktop/UPower/devices/DisplayDevice
并将所有文件显示在单行中。所以我用过:
$ upower -e | xargs -0 echo
/org/freedesktop/UPower/devices/line_power_AC
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/line_power_ucsi_source_psy_USBC000o001
/org/freedesktop/UPower/devices/DisplayDevice
它可以工作,但显示一个空行,但这不起作用:
$ upower -e | xargs -0 upower -i
failed to set path: Object path invalid: /org/freedesktop/UPower/devices/line_power_AC
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/line_power_ucsi_source_psy_USBC000o001
/org/freedesktop/UPower/devices/DisplayDevice
为什么upower -e | xargs upower -i
不起作用?我在 Fedora 上使用 Bash。
我在这里缺少什么吗?
编辑:
这似乎有效:
upower -e | xargs -I {} upower -i "{}"
但我想知道:如果文件名没有空格,为什么需要引号?
upower -e
生成一个以换行符分隔的对象路径列表。当您使用
upower -e | xargs upower -i
时,该命令在空格上对其进行标记,并将所有路径传递给它无法处理xargs
的单个调用。upower -i
然后您尝试
upower -e | xargs echo
了,并注意到输出由单行组成 -echo
虽然如此,但并没有告诉您的输出upower -e
是如何分隔的。接下来你尝试
upower -e | xargs -0 echo
了 ,它(因为 的输出upower -e
不是空分隔的)将单个多行参数传递给echo
,它很高兴地打印了它。类似地upower -e | xargs -0 upower -i
传递了一个多行路径到upower -i
,这不足为奇。终于你发现了
upower -e | xargs -I {} upower -i "{}"
。由于-I
暗示,这将输出的-L
每一行upower -e
传递给单独的upower -i
. 你可以用路径中的空格在这里不是一个因素,但如果是,你应该告诉 xargs 不仅每次调用读取一行,而且只在换行符上对其进行标记:
或等效地
引用替换文本
{}
可能也不是必需的(无论文本本身是否包含空格) - 请参阅在 shell 中引用花括号和链接的副本在上下文中讨论相同的问题find -exec