我正在尝试创建一个别名或shell函数,我可以运行它来检查我的电池寿命,试图熟悉别名和bash。我遇到了一个问题,我没有从我的命令收到任何反馈,也无法验证它是否正常工作,或者是否有任何我遗漏的步骤会给我我想要的结果。
当前.bashrc
别名:
alias battery='upower -i $(upower -e | grep -e 'BAT'| grep -E "state|to\ full|percentage")'
所需用途:
b@localhost:~$ battery
期望的结果:
state: discharging Time to empty: x.x Hours percentage: xx%
我已经阅读了bash参考资料,这些资料可能对我有所帮助。我无法在这里找到任何我认为适用的东西。谢谢你的考虑!
答案 0 :(得分:2)
正如@bannji在评论中已经宣布的那样,他已经修好了他的命令 旧的不正确的别名
'upower -i $(upower -e | grep -e 'BAT'| grep -E "state|to\ full|percentage")'
新的正确别名
'upower -i $(upower -e | grep -e "BAT") | grep -E "state|to\ full|percentage"'
大多数评论都是在谈论报价的解释。这不是问题所在。主要区别在于子命令关闭的位置。在第一种情况下,子命令在最后grep
之后关闭,su upower -i
什么都没有
在第二个命令中,第二个grep
将过滤upower -i
的输出。
引用的差异在另一个例子中很有意思。
addone() {
((sum=$1+1))
echo "${sum}"
}
i=1
alias battery='addone $(addone $i)'
i=4
battery
# other alias
i=1
alias battery2='addone $(addone '$i')'
i=4
battery2
两个电池命令都会尝试将$i
的值加2,但会产生不同的结果
命令battery
将2添加到$i
的当前值4,结果为6.
在定义别名时,battery2
命令会将$i
的值加2,从而产生3。
为什么呢?
在battery2中,字符串$i
被单引号括起来,但这些单引号位于其他引号内。结果是$i
被评估,别名被定义为
alias battery2='addone $(addone 2)'