ในคำถามของคุณฉันรู้ว่าคุณใช้ 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สิ่งที่ต้องใช้เวลาคือเมื่อมันมีการสร้าง ทั้งหมด ประเภทข้อมูล