파이프가 upower -e와 함께 작동하지 않는 이유

파이프가 upower -e와 함께 작동하지 않는 이유

방금 다음 명령을 찾았습니다.

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

관련 정보