2014-04-18 1 views
2

긴 명령에 대한 별칭을 만들고 싶습니다. 그러나 나는 그것을 올바르게 벗어날 수 없다, 나는 파이프에 문제가 있다고 생각한다. 별명에 대한별칭으로 파이프 내에서 grep 및 awk를 벗어나는 방법은 무엇입니까?

내 원래 명령

ps aux | grep gimp | awk '{ print $2 '\011' $11 }' | grep -v 'grep' 

내 시도는

alias psa="ps aux | grep $1 | awk '{ print \$2 \"\011\" \$11 }' | grep -v 'grep'" 

하지만 오류가 발생 grep 파일을 열 수 없습니다 foo (나는 psa foo을)
그 마지막 부분을 제거하면 | grep -v 'grep' 다음 awk이 같은 오류를 발생시킵니다.

쉘 스크립트보다 별칭을 선호합니다.

+0

원래 명령은하지 않습니다 'print' 명령에서 큰 따옴표가 사용되어서는 안될까요? – Barmar

+3

별칭은 인수를 처리하지 않으므로 따옴표 문제를 해결하더라도 작업을 수행 할 것이라고 생각하지 않습니다. 쉘 기능으로 만드십시오. – Barmar

+1

왜 ps와 같은 출력을 파싱합니까? 끔찍하다! 그냥'pgrep -l gimp'를 의미하지 않니? –

답변

6

:

psa() { 
    ps aux | grep "$1" | awk '{print $2 "\t" $11 }' | grep -v grep 
} 
+1

당신은 모든 파이프와 명령을 필요로하지 않습니다. 하나의 awk 명령이 그것을합니다 :'ps aux | awk -v cmd = "$ 1"($ 0 ~ cmd) && ($ 0! ~ "grep") {$ 2 "\ t"$ 11} '인쇄. 그것이 전체적인 접근 방식이라고 말하는 것이 아니라 단지 대답을 생략하는 것입니다. –

+1

tbh grep 버전이 더 읽기 쉽습니다. – Lucas

1

당신이하는 기능을 사용하여 모든 이스케이프를 방지 할 수 있습니다

당신이 인수를 삽입하려면 함수를 사용할 필요가
myps() { 
    ps aux | grep gimp | awk '{ print $2 "\011" $11 }' | grep -v 'grep' 
} 
관련 문제