Puncte:8

De ce acest alias folosind awk nu returnează un răspuns curat ca celelalte două ale mele?

drapel cn

Fac câteva alias-uri pentru terminalul meu pentru a scoate diferite adrese IP. Două din trei dintre ele funcționează bine, dar cel al meu pentru gateway implicit nu va returna un răspuns curat.

alias inet="hostname -I | awk '{print $3}'" 

se intoarce: 192.168.xxx.xx precum a fost intenționat

alias pubip="curl ifconfig.me"

se intoarce: 354.xxx.xx.xx precum a fost intenționat

Cu toate acestea, alias-ul pe care l-am făcut pentru a returna ip-ul implicit al gateway-ului

alias def="ip r | grep default | awk '{print $3}'"

se intoarce : implicit prin 192.168.xxx.xxx dev eth0

Folosesc aceeași linie în terminal și va returna doar gateway-ul implicit așa cum este prevăzut.

Dar când este stocat ca alias, porțiunea „awk” a scriptului nu funcționează.

Nu pot canaliza de două ori într-un alias? Mai este ceva greșit în codul meu?

Puncte:15
drapel cn
raj

În definiția aliasului dvs., $3 este de fapt extins în momentul în care aliasul este definit (deși nu arată așa la prima vedere). Dacă tastezi alias după definirea alias-ului (pentru a vedea alias-urile definite), veți vedea că aliasul dvs. are de fapt forma

alias def='ip r | grep implicit | awk '\''{print }'\'''

iar din cauza imprimare singur in awk, întreaga linie returnată de grep este tipărită.

Utilizați următoarele pentru a defini aliasul:

alias def="ip r | grep default | awk '{print\$3}'"

Apoi aliasul tău va avea forma:

alias def='ip r | grep implicit | awk '\''{print $3}'\'''

și va funcționa așa cum doriți.

JakobyScream avatar
drapel cn
Esti foarte apreciat. Explicația completă a fost grozavă, nu eram sigur dacă trebuie să scap de vreun personaj sau ce, dar da, acum funcționează conform intenției. Tu ai o zi bună
drapel us
de asemenea, puteți elimina grep: `alias def="ip r | awk '/default/ {print \$3}'"`
drapel cn
De asemenea, puteți defini o funcție în loc de alias și nu trebuie să vă faceți griji pentru nimic din toate acestea.
Hopping Bunny avatar
drapel cn
Dacă doar obținerea rezultatului este un obiectiv (și nu folosirea awk), atunci puteți folosi comanda simplă de tăiere astfel: `alias def="ip r|grep default|cut -d\" \" -f3"`. `-d` definește un „spațiu” ca delimitator, iar `-f` specifică câmpul de imprimat. Barele oblice inverse sunt necesare deoarece încapsulăm comanda într-un alias care are deja ghilimele la început și la sfârșit. Dacă imprimăm comanda în terminal, acestea nu sunt necesare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.