파이프로 연결된 일련의 명령을 .bashrc의 별칭으로 변환해야 합니다.

파이프로 연결된 일련의 명령을 .bashrc의 별칭으로 변환해야 합니다.
sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

터미널에서 위 명령을 실행하면 올바른 "내부" IP 주소가 출력됩니다. 예를 들어 별칭으로 전달하려고 하면 다음과 같습니다.

alias intip='sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}''

다음 오류가 발생합니다.

alias: addr: | cut -d: -f2 | awk { not found
alias: print not found
alias: } not found

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

중요한 위치에 큰따옴표와 작은따옴표를 사용하는 데 따른 문제:

alias lsa="ls -l | awk '{print \$1}' "

답변2

당신이 잘못하고 있는 것은 별칭을 사용하여 명령에 더 짧은 이름을 부여하거나 자동으로 명령에 인수를 전달하는 것보다 더 복잡한 작업을 수행하는 것입니다. 대신 함수를 사용하면 참조에 대해 걱정할 필요가 없습니다.

intip () {
    /sbin/ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
}

여기서는 sudo가 필요하지 않으며 ifconfig보기만 할 때는 권한이 필요하지 않습니다. 그러나 많은 배포판에서는 전체 경로를 제공해야 하는데 ifconfig루트가 아닌 사용자에게는 그렇지 않은 경우가 많습니다.PATH

그런데, awk에서 완전히 필터링을 수행할 수 있지만, 그런 방식이 더 편하다면 다양한 도구를 자유롭게 사용해 보세요. 한 가지 방법은 다음과 같습니다.

intip () {
    /sbin/ifconfig wlan0 | awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}

인터페이스 이름을 함수에 대한 선택적 매개변수로 쉽게 전달할 수 있습니다.

intip () {
    /sbin/ifconfig "${1:-wlan0}" |
    awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}

별칭이 작동하지 않는 이유를 설명하기 위해 작은따옴표를 사용하여 별칭을 구분하고 별칭 텍스트에 사용합니다. 통역사는 귀하의 마음을 읽을 수 없으며 예상되는 내용을 볼 수 없습니다. 바라보다args 및 "종료되지 않은 인용 문자열"/"예기치 않은 EOF"에서 읽은 명령을 사용하여 sh(대시)에서 bash 호출인용문 안에 인용문이 있는 경우도 있고에코가 인용 문자를 무시하는 이유는 무엇입니까?4개의 문자를 입력하여 작은따옴표로 묶인 문자열에 작은따옴표를 효과적으로 포함하는 방법을 알아보세요 '\''.

답변3

아니면 설치할 수 있습니다moreutils(적어도 배포판에 사용 가능한 경우) ifdata.

$ ifdata -pa br0
172.16.1.244

물론 br0 대신 wlan0을 사용할 수도 있습니다.

관련 정보