alias ip="ifconfig eth0 | grep '255$' | awk '{print '\$2'}'"
alias
매개변수 없이 명령을 사용하면 다음과 같은 결과를 얻습니다.
alias ip='ifconfig eth0 | grep '\' '255$'\'' | awk '\''{print '\''$2'\''}'\'''
그러나 실행 ip
하면
inet xxx.xxx.x.xxx netmask xxx.xxx.xxx.x broadcast xxx.xxx.x.xxx
을 실행하면 ifconfig eth0 | grep '255$' | awk '{print '\$2'}'
와 같은 IP만 성공적으로 얻을 수 있습니다 xxx.xxx.x.xxx
.
나는 이 상황이 혼란스럽다. 도와주세요?
답변1
그 모든 인용 지옥 후에 당신이 실행하게 되는 것은 awk '{print }'
. 이는 별칭 할당에서 \$2
백슬래시가 확장을 방지하는 큰따옴표로 묶인 문자열에 있기 때문입니다 $2
. 그러나 별칭을 사용하면 대화식 쉘에서 비어 있을 수 있는 $2
현재 위치 인수로 인용이 해제되고 확장됩니다 . $2
인수가 없는 명령은 print
전체 입력 행을 인쇄합니다.
가장 쉽게 볼 수 있는 것은 다음과 같습니다 set -x
.
$ set -x
$ ip
+ grep '255$'
+ /sbin/ifconfig eth0
+ awk '{print }'
inet ... netmask 255.0.0.0 broadcast 10.255.255.255
(그리고 해당 인터페이스의 넷마스크가 잘못된 것 같습니다.)
함수를 사용하면 이와 같은 작업을 수행하는 것이 더 쉽습니다. 전체 명령을 인용할 필요가 없기 때문입니다.
myip() {
ifconfig eth0 | grep '255$' | awk '{print $2}'
}
그러나 awk
grep이 수행하는 작업을 수행하는 것이 가능합니다. 아마도 일치해서는 안 되지만 키워드는 일치해야 할 255
수도 있습니다 inet
.
myip() {
ifconfig eth0 | awk '/inet/ {print $2}'
}
또는 좀 더 명확하게 말하자면:
myip() {
ifconfig eth0 | awk '$1 == "inet" {print $2}'
}
이는 또한 행 /inet/
일치도 방지합니다 inet6
.
이는ip
또 다른 유틸리티.
답변2
방금 컴퓨터에 복사했는데 시도해 볼 수 있나요?
alias ip="ifconfig eth0 | grep '255$' | awk '{print \$2}'"
이것은 나에게 효과적입니다.
꼭 source .bashrc
업데이트하세요