
그래서 나는 기계에 배터리가 있는지 확인한 다음, 배터리가 있는지 여부에 따라 다른 명령을 실행하려고 합니다. 지금까지 내가 가진 것은 다음과 같습니다.
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
그러나 예상대로 /tmp/batstat에 NO BAT0을 쓰는 동안 "bash: [: 너무 많은 인수"라는 오류가 반환됩니다. grep만 실행하면 제대로 작동하는데 왜 if 조건으로 작동하지 않는지 이해할 수 없습니다.
배터리를 확인하는 더 좋은 방법이 있다면 100% 동의합니다.
답변1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
일련의 명령을 받아 최종 명령(이 경우 grep)의 상태에 대해 작업합니다. grep
일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
답변2
grep -F BAT0 /tmp/batstat
test
의 내장에 대한 조건부 표현(고급 매뉴얼에 자세히 설명되어 있음)이 아닙니다 bash
. 의 출력은 grep
사용되지 않으므로 -q
옵션과 종료 코드에 의존하는 것만으로도 충분할 것입니다.
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
또한 /tmp/batstat
특히 사악한 로컬 사용자가 액세스할 수 있는 경우에는 매우 좋지 않은 선택일 수 있습니다. 대신 사용을 고려하십시오.mktemp(1)
, 또는 아래에서 파일을 찾을 수 없습니다 /tmp
.