Shell 用zsh打印文件
我正在写我的.zshrc。我希望我的提示显示我的电池电量,它存储在Shell 用zsh打印文件,shell,return-value,zsh,zshrc,Shell,Return Value,Zsh,Zshrc,我正在写我的.zshrc。我希望我的提示显示我的电池电量,它存储在 /sys/class/power\u supply/BAT0/capacity 我编写了一个函数,它将从文件中获取值并更改数字的颜色(如果大于50,则为绿色,如果大于20,则为橙色,否则为红色) 问题是我明白了: /home/user/.zshrc:5: parse error: condition expected: $getPower 我的zshrc为$getPower函数显示了这一点 3 function getPowe
/sys/class/power\u supply/BAT0/capacity
我编写了一个函数,它将从文件中获取值并更改数字的颜色(如果大于50,则为绿色,如果大于20,则为橙色,否则为红色)
问题是我明白了:
/home/user/.zshrc:5: parse error: condition expected: $getPower
我的zshrc为$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
关键字,另一种是不使用关键字。不确定问题出在哪里。值得注意的是,此代码中没有特定于zsh的内容——下面使用的所有扩展都出现在ksh93和bash中
getPower() { cat /sys/class/power_supply/BAT0/capacity; }
batteryLeft() {
if (( $(getPower) > 50 )); then
echo "Phrase"
fi
}
关键字使您的代码与基线POSIX shell不兼容,但与兼容语法相比没有任何优势。作为一种良好做法,请避免使用它函数
- 要运行函数并对其输出进行操作,需要使用命令替换,例如
$()
- 要运行数字比较而不是字符串比较,您需要使用
代替(())
,或者使用[[]]
代替-gt
(这与基线POSIX不兼容——您需要使用
可以与其他shell一起使用,但也具有补偿优势)[“$(getPower)”-gt 50]
$get power
,而不是$getPower
。另外,你是否需要在ZSH中的函数名后面加上paren,就像在Bash中一样?谢谢大家,我正在我的p上键入这个hone,所以有一些输入错误我只是做了一个快速测试,准确地重新创建了这个函数,并在zsh 5.1.1中运行它,没有出现任何问题(好吧,cat抱怨丢失了一个具有确切路径的文件,但这不是问题所在)。因此,问题一定在别处。这可能与您将getPower
称为$getPower
有关(您通常不使用$
调用函数)。为了确定,我需要看更多的代码。这里有用的一个扩展是用echo
@TimPalmer,不,只是
作为整个函数体;因此,getPower(){
——与bash不同,zsh的内置行为在这种情况下相当于cat
,但是(正如切普纳所说)没有使用外部进程的启动开销。将内容重定向到echo
的stdin没有任何用处,因为echo
不会从其stdin读取内容。