我的bashrc文件中有一个别名,它输出当前文件夹内容和系统可用存储空间,由watch函数连续更新。
alias wtch='watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| head -2 | awk '{print \$4}'"'
字符串工作正常,直到我放入awk部分。我知道我需要逃避单引号,同时仍然保持双引号和4美元,但我无法让它工作。我做错了什么?
这是我得到的错误
-bash: alias: $4}": not found
答案 0 :(得分:4)
由于别名的引用使其变得困难,所以你可以改为使用它:
wtch() {
watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| head -2 | awk '{print $4}'"
}
中的问题2非常相似
此外,还有一件小事,但您可以在最后跳过head
进程,只需awk
执行此操作,甚至可以在第二行之后退出
wtch() {
watch -n 0 -t "du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| awk '{print $4} NR >= 3 {exit}'"
}
答案 1 :(得分:2)
在这种情况下,您可以使用cut
代替awk
。而且你会产生同样的效果。
alias wtch="watch -n 0 -t 'du -sch * -B 1000000 2>/dev/null | sort -h && df -h -B 1000000| head -2 | cut -d\ -f4'"
解释cut
:
-d option defines a delimiter
-d\ means that my delimiter is space
-f selects a column
-f4 gives you the fourth column