2014-11-10 2 views
1

현재 파이프를 허용하는 Doskey 별칭을 정확히 생성 할 수있는 방법을 파악하려고합니다.sizeof 폴더를 인쇄하기위한 cmd 별칭 cygwin

kB로 foldersize를 수집하려고합니다.

나는

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 파이프를 사용합니까?

내가 뭘 잘못하고 있니? 도스 키 별칭 내부

+0

별칭을 인용해야합니다 :'alias dirsize = "quoted content"' – nowox

답변

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

  • 파이프 문자는 $1$1$b

  • 모든 인스턴스는 별칭에 대한 호출에서 첫 번째 인수로 대체됩니다, 그래서 awk 명령 내에서 별칭 구문 분석 중에 바뀌고 실행시에 인수로의 참조가되지 않습니다.

doskey 별칭 내부의이 문제에 대한 일반적인 해결책은 명령 실행을 방해하지만, 그것을 처리하는 파서를 DOSKEY 피할 수없는 무언가에 $1를 변환하는 것입니다. 이렇게하려면 보통 해결책은 $^1을 사용하는 것이지만이 경우이 시퀀스는 cmd으로 처리되지 않고 awk으로 처리되고 ^은 이스케이프 문자로 간주되지 않습니다.

우리는 검색 색인을 저장하는 변수 (i)를 사용하여 직접 $1을 교체하고 doskey 별칭 내부에 특별한 의미가 없습니다 $i으로 $1을 대체 awk 안에 그것을 해결해야합니다.