“shell函数”或“别名”是否适合此用途

时间:2017-09-09 17:18:39

标签: bash shell alias

我正在尝试创建一个别名或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参考资料,这些资料可能对我有所帮助。我无法在这里找到任何我认为适用的东西。谢谢你的考虑!

1 个答案:

答案 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)'