कैसे एक सूची में dmesg के उत्पादन से मिलान शब्दों को बचाने के लिए


0

मैं विभिन्न बंदरगाहों और धारावाहिक-यूएसबी उपकरणों का उपयोग करके अपने डिवाइस पर यूएसबी-सीरियल डिवाइस को कनेक्ट कर रहा हूं, कभी-कभी 'ट्टीबस 1', कभी-कभी 'टिट्सब 1' या 'ट्टीबस 2' के रूप में दिखाते हैं।

मैं इस आदेश से सभी ttyUSB नामों को निकालने के लिए एक स्क्रिप्ट कैसे लिख सकता हूं:

deviceNodes = "$(sudo dmesg tail | egrep -i 'ttyUSB')"
   echo "${deviceNodes}"

   for i in "${deviceNodes[@]}"
   do
    udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1
   done

और सूची में आइटम पर एक चर और पाश में इसे बचाने के लिए?

यहाँ dmesg कमांड का विवरण है:

[37606.832517] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[37664.565271] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[37695.844687] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[38017.111961] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[38490.802048] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[38776.225985] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[38778.317840] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[38874.027395] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[38876.631579] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[39040.443963] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[39796.942837] usb 2-1.2: FTDI USB Serial Device converter now attached to ttyUSB0
[39802.674018] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB1
[40372.029798] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
[40372.156024] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[41642.886671] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0

कृपया sudo dmesg tail | egrep -i 'ttyUSB'अपने प्रश्न का आउटपुट जोड़ें ।
सायरस

जवाबों:


0
> deviceNodes = "$(sudo dmesg tail | egrep -i 'ttyUSB')"

यह एक सिंटैक्स त्रुटि है। आपके पास चर असाइनमेंट में बराबर चिह्न के आसपास व्हाट्सएप नहीं हो सकता है। Http://mywiki.wooledge.org/BashPitfalls#foo_.3D_bar भी देखें

इसके अलावा, यदि आप केवल वास्तविक मैचों पर पुनरावृति करना चाहते हैं, तो आपको केवल निकालने के लिए अभिव्यक्ति को बदलने की आवश्यकता है। इसे इस्तेमाल करे।

dmesg | grep -Eo 'ttyUSB[0-9]+' | sort -u |
while read devnode; do
    udevadm info -a -n /dev/"$devnode" | grep '{serial}' | head -n1
done

(मेरे सिस्टम पर, dmesgबिना sudoठीक चलता है, और tailतर्क नहीं है ।)


0

क्या यह केवल निम्नलिखित को बदलने की बात नहीं है,

deviceNodes = "$(sudo dmesg tail | egrep -i 'ttyUSB')"

इसके लिए?

deviceNodes="$(cat temp | egrep -i 'ttyUSB' | sed 's/^.*tty/tty/' )"

'i' स्पष्ट रूप से वैरिएबल होगा जिसे आपको ओवररेट करने की आवश्यकता है।

टेस्ट निम्नलिखित था।

echo "[37664.565271] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0" | sed 's/^.*tty/tty/'
ttyUSB0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.