방금 다음 명령을 찾았습니다.
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 "{}"
하지만 궁금합니다. 파일 이름에 공백이 없으면 왜 따옴표가 필요한가요?
답변1
upower -e
개행으로 구분된 객체 경로 목록을 생성합니다.
를 사용하면 upower -e | xargs upower -i
명령 xargs
이 이를 공백에 표시하고 모든 경로를 단일 호출에 전달 upower -i
하지만 이를 처리할 수는 없습니다.
그런 다음 시도해 보고 upower -e | xargs echo
출력이 한 줄로 구성되어 있음을 확인합니다. 이는 최종 결과일 뿐이며 출력이 어떻게 구분되는지 echo
알려주지 않습니다 .upower -e
다음으로 를 시도했습니다 upower -e | xargs -0 echo
. 여기서 (출력은 다음과 같습니다 upower -e
.아니요null로 구분됨) echo
행복하게 인쇄됩니다. 마찬가지로 upower -e | xargs -0 upower -i
여러 줄 경로를 에 전달하면 upower -i
예상대로 충돌이 발생합니다.
마침내 당신은 그것을 발견했습니다 upower -e | xargs -I {} upower -i "{}"
. -I
을 의미하기 때문에 -L
이는 다음을 통과합니다.철사upower -e
별도의 호출로 출력 됩니다 upower -i
. 당신도 같은 효과를 얻을 수 있습니다
upower -e | xargs -L upower -i
공백이내에여기서 경로는 중요한 요소가 아니지만, 그렇다면 xargs에게 호출당 한 줄을 읽을 뿐만 아니라 개행에만 표시하도록 지시해야 합니다.
upower -e | xargs -d '\n' -L upower -i
또는 동등하게
upower -e | xargs -d '\n' -n 1 upower -i
또한 대체 텍스트를 인용할 필요가 없을 수도 있습니다 {}
(텍스트 자체에 공백이 포함되어 있는지 여부).셸에서 중괄호 인용그리고 맥락에서 동일한 문제를 논의하는 링크된 사본find -exec