내 프로세스가 소비하는 메모리 양을 알기 위해 이 줄을 얻었습니다.
$ ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
이제 이 명령에 대한 별칭을 만들고 싶지만 '
이스케이프 문자에 문제가 있습니다.
$ alias mm=ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
bash: alias: -u: not found
bash: alias: myuser: not found
bash: alias: -o: not found
bash: alias: pid,rss,command: not found
Total 0 MB
작은따옴표를 이스케이프 처리하려고 시도했지만 여전히 작동하지 않습니다.
$ alias mm='ps -u $USER -o pid,rss,command | \
awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
>
이 별칭을 만드는 방법을 이해하도록 도와주실 수 있나요?
답변1
별칭으로 만들려면(가능한 경우) 별칭의 전체 값을 큰따옴표로 묶어야 합니다. 따라서 별칭의 일부 항목도 이스케이프해야 하며, 모든 필드 매개변수도 이스케이프해야 합니다. awk
이는 별칭을 설정할 때 Bash에서 매개변수로 해석되기 때문입니다.
이것은 나에게 효과적입니다.
$ alias mm="ps -u $USER -o pid,rss,command | \
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}'"
위에서 나는 다음을 수행했습니다.
별칭 값은 큰따옴표로 묶입니다.
alias mm="ps -u ...."
awk에 대한 큰따옴표를 이스케이프하세요
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}
awk 필드 탈출
awk '{print \$0}{sum+=\$2} END
이것을 사용할까요?
아마도 그렇지 않을 것입니다. 무슨 일이 일어나고 있는지 유지하고 이해하는 것이 더 쉽기 때문에 Bash 기능으로 전환하겠습니다. 하지만 여전히 필요한 경우 별칭은 다음과 같습니다.
답변2
이 별칭을 만드는 방법을 이해하도록 도와주실 수 있나요?
Bash를 사용하는 경우 함수를 만들어 .bashrc에 넣는 것이 좋습니다.
mm() {
ps -u "$USER" -o pid,rss,command |
awk '{print $0}{sum+=$2}
END {print "Total", sum/1024, "MB"}'
}
이면 bash
변수를 인용해야 합니다. 함수 내에서 모든 것을 한 줄에 넣을 필요는 없습니다.
답변3
탈출 명령은 다음과 같습니다.
alias mm='ps -u $USER -o pid,rss,command | \
awk '\''{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'\'
셸에서 따옴표를 이스케이프하는 예:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
열린 것( '
)을 완성하고, 이스케이프된 것( \'
)을 배치하고, 다른 것( '
)을 엽니다.
또는:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
이는 열어 놓은 인용문( '
)을 완성하고, 그 인용문을 다른 인용문( "'"
)에 넣은 다음, 다른 인용문( )을 열어서 '
수행 됩니다.
관련된:작은따옴표로 묶인 문자열에서 작은따옴표를 이스케이프 처리하는 방법은 무엇입니까?스택오버플로우 SE에서