2016-10-25 1 views
-1

.zshrc를 쓰고 있습니다. 내 배터리 수준을 표시하도록 내 프롬프트가 표시됩니다. /sys/class/power_supply/BAT0/capacity 파일에서 값을 가져 와서 숫자 색상을 변경하는 함수를 작성했습니다 (녹색이 50보다 큰 경우 녹색, 20보다 큰 경우 주황색, .zsh에서 파일 인쇄하기

/home/user/.zshrc:5: parse error: condition expected: $getPower 

내 zshrc가 ZSH Documentation 처음 2 대구에 $ getPower 기능

3 function getPower() 
4 { 
5  cat /sys/class/power_supply/BAT0/capacity 
6 } 
7 function batteryLeft () 
8 { 
9  if [[ getPower > 50 ]]; then 
10  echo "Phrase" 
11 fi 
12} 

이 표시 : 빨간색, 그렇지 않으면

문제는 내가이를 얻을 수있다 전자 표본에는 함수를 선언하는 두 가지 방법이 있으며 function 키워드가 있고없는 경우가 있습니다. 문제가 무엇인지 잘 모릅니다.

+2

.zshrc의 5 행 또는 5 행 주변의 함수 정의입니까? 그렇지 않다면 5 번 줄에 무엇이든 추가하십시오. (근처에 실제 문제가있을 수 있습니다). .zshrc가 비교적 짧으면 모든 것을 게시해야합니다. 길다면이 문제를 보여주는 [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 만들어야합니다. – 8bittree

+0

중요한지는 모르지만 메시지에'$ getPower' 대신'$ get power'라고 쓰여 있습니다. –

+0

또한 Bash처럼 ZSH에서 함수 이름 뒤에 parens가 필요합니까? –

답변

1

특히이 코드에는 zsh에만 해당하는 것이 없으며 아래에서 사용되는 모든 확장은 ksh93과 bash에도 있습니다. 호환 구문을 통해 어떤 이점을 추가하지 않습니다 동안

getPower() { cat /sys/class/power_supply/BAT0/capacity; } 

batteryLeft() { 
    if (($(getPower) > 50)); then 
     echo "Phrase" 
    fi 
} 
  • function 키워드는 기본 - POSIX의 껍질 코드가 호환되지 않는 수 있습니다. 좋은 연습의 문제로 그것을 피하십시오.
  • 을 실행하여 기능을 수행하면 해당 출력에서 ​​작동하므로 $()과 같은 명령 대체가 필요합니다.
  • 숫자 비교보다는 문자열 비교를 실행하려면 [[ ]]의 장소에서 (())를 사용하거나 > 대신 -gt을 사용하거나해야합니다. (이 은 기본 POSIX와 호환되지 않으므로입니다. 다른 쉘을 사용하려면 [ "$(getPower)" -gt 50 ]을 사용해야하지만 보상상의 이점이 있습니다).
+0

여기서 유용한 'zsh' 확장은 새 프로세스를 시작하지 않고'cat'을'<'로 바꾸어 파일을 읽는 것입니다. – chepner

+0

'echo

+0

@TimPalmer, 아니요, 함수의 전체 본문처럼'