直接在命令行上工作,但在bash中别名时投诉语法错误

时间:2015-11-15 13:49:11

标签: bash alias

这是命令,我试图在bash上运行,它运行得很好。但是,当我别名并放入bashrc时,它抱怨语法错误。

  alias dsh="for i in `ls -d */`;do echo $i; du -sh $i;done"

3 个答案:

答案 0 :(得分:4)

在双引号内,反引号中的命令替换将立即由shell进行评估。明显的解决方法是切换到单引号,这会抑制这种情况。但是你可以避免反引号和useless ls更简单,更优雅for i in */

但是,你根本不需要循环;像大多数带有文件名参数的Unix实用程序一样,du接受任意数量的它们:du -sh */

答案 1 :(得分:2)

基本上你需要使用单引号。否则ls -d */$i会在您定义别名的shell中展开,而不是在执行该别名的shell中展开。

alias dsh='for i in `ls -d */`;do echo "$i"; du -sh "$i";done'

但是,不推荐迭代ls的结果。如果ls返回的文件夹名称包含空格,则for i in循环将无法正确处理它。这就是我建议使用find

的原因
alias dsh='find -maxdepth 1 -type d -exec du -sh {} \;'

请注意du -sh将打印文件夹名称。不需要进一步的回声。

tripleee发布an answer此处显示使用find有点过于复杂。他建议使用du -sh */。对我来说这看起来是最好的方法。我会配合它。

答案 2 :(得分:2)

使用单引号而不是双引号而不是ls -d */仅使用*/

alias dsh='for i in */;do echo "$i"; du -sh "$i"; done'