Điểm:8

Tại sao bí danh này sử dụng awk không trả lại phản hồi rõ ràng như hai bí danh khác của tôi?

lá cờ cn

Tôi đang tạo một số bí danh cho thiết bị đầu cuối của mình để xuất các địa chỉ IP khác nhau. Hai trong số ba trong số chúng hoạt động tốt, nhưng cổng của tôi cho cổng mặc định sẽ không trả lại phản hồi rõ ràng.

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

trả về: 192.168.xxx.xx như dự định

bí danh pubip="curl ifconfig.me"

trả về: 354.xxx.xx.xx như dự định

Tuy nhiên, bí danh tôi đã tạo để trả về ip cổng mặc định

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

trả về: mặc định qua 192.168.xxx.xxx dev eth0

Tôi sử dụng cùng một dòng trong thiết bị đầu cuối và nó sẽ chỉ trả về cổng mặc định như dự định.

Nhưng khi nó được lưu trữ dưới dạng bí danh, phần "awk" của tập lệnh không hoạt động.

Tôi có thể không đặt hai lần trong một bí danh không? Có cái gì khác sai trong mã của tôi?

Điểm:15
lá cờ cn
raj

Trong định nghĩa bí danh của bạn, $3 thực sự được mở rộng tại thời điểm bí danh được xác định (mặc dù thoạt nhìn nó không giống như vậy). nếu bạn gõ bí danh sau khi xác định bí danh của bạn (để xem các bí danh đã xác định), bạn sẽ thấy bí danh của mình thực sự có dạng

bí danh def='ip r | grep mặc định | awk '\''{in}'\'''

và vì in một mình trong awk, toàn bộ dòng được trả về bởi tiếng kêu được in.

Sử dụng cách sau để xác định bí danh:

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

Sau đó, bí danh của bạn sẽ có dạng:

bí danh def='ip r | grep mặc định | awk '\''{in $3}'\'''

và nó sẽ hoạt động như bạn muốn.

JakobyScream avatar
lá cờ cn
Bạn rất được đánh giá cao. Lời giải thích đầy đủ rất hay, tôi không chắc liệu mình có cần thoát khỏi một ký tự nào đó hay không, nhưng vâng, hiện tại nó hoạt động như dự định. Chúc một ngày tốt lành
lá cờ us
bạn cũng có thể loại bỏ grep: `alias def="ip r | awk '/default/ {print \$3}'"`
lá cờ cn
Bạn cũng có thể định nghĩa một hàm thay vì bí danh và không phải lo lắng về bất kỳ điều gì trong số này.
Hopping Bunny avatar
lá cờ cn
Nếu chỉ nhận được đầu ra là mục tiêu (và không sử dụng awk), thì bạn có thể sử dụng lệnh cắt đơn giản như sau: `alias def="ip r|grep default|cut -d\" \" -f3"`. `-d` xác định một "dấu cách" là dấu phân cách và `-f` chỉ định trường sẽ in. Dấu gạch chéo ngược là cần thiết vì chúng tôi đang gói lệnh trong bí danh đã có dấu ngoặc kép ở đầu và cuối. Nếu chúng ta in lệnh trong thiết bị đầu cuối, thì chúng không cần thiết.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.