1

我目前试图弄清楚我如何才能生成允许管道的 Doskey 别名。

我想以 kB 为单位收集文件夹大小。

我努力了

alias dirsize=du -P -c -a -b $1 | grep total | awk '{print "Folder has: " $1 "kB"}'

但我只是得到输出

Folder has: kB

当我只是使用

dirsize=du -P -c -a -b $1 | grep total

它让我

C:\>dirsize Temp
1364201 total

但是我现在如何使用 awk 管道?

我究竟做错了什么?

4

1 回答 1

3
doskey dirsize=du -P -c -a -b $1 $b grep -E "total$" $b awk "{i=1;print \"Has \" $i \" bytes\"}"

在 doskey 别名中

  • 管道字符是$b

  • 的所有实例都$1将替换为别名调用中的第一个参数,因此,命令$1内部awk将在别名解析期间被替换,并且在执行时它不会是对参数的引用

doskey在别名中解决此问题的通常方法是将其转换$1为不会干扰命令执行但避免 doskey 解析器处理它的东西。要做到这一点,通常的解决方案是使用$^1,但在这种情况下,这个序列不是由 处理的cmd,而是由处理的,awk并且^不被视为转义字符。

我们需要在内部解决它,使用变量 ( )awk替换直接以存储要检索的索引,并将别名替换为没有特殊含义的别名。$1i$1$idoskey

于 2014-11-10T12:28:50.863 回答