ในคำถามของคุณฉันรู้ว่าคุณใช้ networksetup -listnetworkserviceorder
แต่ฉันจะใช้ networksetup -listallhardwareports
แทนที่จะเป็นการง่ายกว่าในการแยกวิเคราะห์เอาต์พุตโดยใช้ awk
ด้วยตัวเองอย่างน้อยการเข้ารหัสเพื่อหลีกเลี่ยงหลาย ท่อ ใช้หลาย ๆ คำสั่ง ตามที่เสนอในคำตอบอื่น ๆ และควรแข็งแกร่งเพียงพอที่จะสร้างผลลัพธ์ที่สอดคล้องกันจนกว่า Apple จะเปลี่ยนรูปแบบผลลัพธ์ของ networksetup -listallhardwareports
ถ้าพวกเขาเคยทำ
เป็นตัวอย่างในระบบของฉัน networksetup -listallhardwareports
แสดงดังต่อไปนี้:
$ networksetup -listallhardwareports
Hardware Port: Bluetooth DUN
Device: Bluetooth-Modem
Ethernet Address: N/A
Hardware Port: Display Ethernet
Device: en3
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Display FireWire
Device: fw0
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Bluetooth PAN
Device: en2
Ethernet Address: N/A
VLAN Configurations
===================
$
ดูบรรทัดผลลัพธ์ที่เกี่ยวข้อง:
Hardware Port: Wi-Fi
Device: en0
วิธีที่ง่ายที่สุดที่จะได้รับ en0
ในตัวอย่างนี้คือ:
networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}'
มันสามารถกำหนดให้กับตัวแปร:
wifiDevice="$(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')"
จากนั้นคุณสามารถใช้ $wifiDevice
ในภายหลังเพื่อเป็นตัวแทนสคริปต์ en0
ในตัวอย่างนี้
เห็นได้ชัดว่าระบบของคุณขึ้นอยู่กับผลลัพธ์ในคำถามของคุณ $wifiDevice
อยากจะเป็น: en1
หากคุณต้องการใช้ networksetup -listnetworkserviceorder
จากนั้นคุณสามารถใช้ awk
ในลักษณะนี้:
networksetup -listnetworkserviceorder | awk '{gsub(/\)/, "")}/Wi-Fi, Device/{print $5}'
อย่างไรก็ตามฉันจะใช้ตัวอย่างแรกของฉันมากกว่านี้
ฉันจะอยู่ห่างจากการใช้ system_profiler
ในกรณีนี้เนื่องจากต้องใช้เวลานานในการสร้างเอาต์พุตเมื่อใช้ networksetup
.
system_profiler
ไม่ต้องใช้เวลานานในการสร้างเอาต์พุตเมื่อคุณระบุชนิดข้อมูลที่คุณต้องการ:system_profiler SPAirPortDataType
สิ่งที่ต้องใช้เวลาคือเมื่อมันมีการสร้าง ทั้งหมด ประเภทข้อมูล