我目前正在尝试弄清楚如何才能生成允许管道的 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 管道呢?
我做错了什么?
最佳答案
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
, 替换直接 $1
使用变量 ( i
) 存储索引以检索和替换 $1
与 $i
在doskey
里面没有特殊意义别名。
关于windows - 用于打印出 sizeof 文件夹 cygwin 的 cmd 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26842545/