操作系統:lubuntu 13.04在一個bash腳本中捕獲輸出的段錯誤
我正在運行一個簡單的bash腳本來將各種系統信息保存到一個文件中。我主要是在從命令輸出到文件中回顯。我運行的命令之一是:
echo "$(nmcli dev list)" >> $CI
我注意到在某些系統上,上面的命令只會返回空白。
如果我直接從CLI運行「nmcli dev list」,我注意到nmcli得到了段錯誤,因此echo沒有將該命令的任何內容放入$ CI文件中。
雖然這裏真正的問題是nmcli具有段錯誤,但是在「nmcli dev list」的輸出中仍然存在有價值的信息,我希望將其保存起來,直到出現段錯誤。
鑑於我在本網站和Google搜索中發現和閱讀的內容,似乎沒有太簡單的答案,因爲由於段錯誤,命令從未完成。但是,我希望有人可能有一個解決方法或其他技術的想法,以捕獲輸出直到段錯誤。
[email protected]:/home/user1$ nmcli dev list
GENERAL.DEVICE: eth0
GENERAL.TYPE: 802-3-ethernet
GENERAL.VENDOR: Marvell Technology Group Ltd.
GENERAL.PRODUCT: 88E8040 PCI-E Fast Ethernet Controller
GENERAL.DRIVER: sky2
GENERAL.DRIVER-VERSION: 1.30
GENERAL.FIRMWARE-VERSION:
GENERAL.HWADDR: 00:24:81:5D:F3:F9
GENERAL.STATE: 20 (unavailable)
GENERAL.REASON: 2 (Device is now managed)
GENERAL.UDI: /sys/devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/eth0
GENERAL.IP-IFACE:
GENERAL.NM-MANAGED: yes
GENERAL.AUTOCONNECT: yes
GENERAL.FIRMWARE-MISSING: no
GENERAL.CONNECTION: not connected
CAPABILITIES.CARRIER-DETECT: yes
CAPABILITIES.SPEED: unknown
Segmentation fault
結果使用bash -x運行我的腳本:
+ echo ' <NMCLI> '
++ nmcli dev list
+ echo ''
+ echo ' </NMCLI> '
整個腳本:
#!/bin/bash
# Define file to save configuration info to
CI=config-info.txt
# Get hostname
HOSTNAME=$(hostname)
echo " <Hostname>$HOSTNAME</Hostname>" >> $CI
# Get IP
IP=$(ifconfig | grep -m 1 -E '(inet.*Bcast.*Mask)' | awk '{print $2}' | sed s/addr:/""/)
echo " <IP>$IP</IP>" >> $CI
# Get SubnetMask
MASK=$(ifconfig | grep -m 1 -E '(inet.*Bcast.*Mask)' | awk '{print $4}' | sed s/Mask:/""/)
echo " <SubnetMask>$MASK</SubnetMask>" >> $CI
# Get Gateway IP
GATEWAY=$(ip route show | grep -m 1 'default via' | awk '{print $3}')
echo " <Gateway>$GATEWAY</Gateway>" >> $CI
# Get DNS Server IP
DNS=$(nmcli dev list | grep -m 1 DNS | awk {'print $2'})
echo " <DNS>$DNS</DNS>" >> $CI
# Get MAC Address of NIC
MAC=$(ifconfig | grep -m 1 HWaddr | awk '{print $5}')
echo " <MAC>$MAC</MAC>" >> $CI
# Get System Uptime
UPTIME=$(cat /proc/uptime | awk '{print $1}')
echo " <Uptime>$UPTIME</Uptime>" >> $CI
# Get NIC linkspeed
LINKSPEED=$(nmcli dev list | grep -m 1 CAPABILITIES.SPEED | awk '{print $2 " " $3}')
echo " <LinkSpeed>$LINKSPEED</LinkSpeed>" >> $CI
# Get NIC Vendor
# The first awk gets all columns in the line excluding the 1st column.
# The second awk removes the leading space in front of the output of the first awk
NICVENDOR=$(nmcli dev list | grep -m 1 GENERAL.VENDOR | awk '{$1=""; print $0}' | awk '{sub(/^[ \t]+/, "")};1'
)
echo " <NicVendor>$NICVENDOR</NicVendor>" >> $CI
# Get NIC Model
NICMODEL=$(nmcli dev list | grep -m 1 GENERAL.PRODUCT | awk '{$1=""; print $0}' | awk '{sub(/^[ \t]+/, "")};1')
echo " <NicModel>$NICMODEL</NicModel>" >> $CI
# Get NIC Driver Name
NICDRIVER=$(nmcli dev list | grep -m 1 GENERAL.DRIVER | awk '{$1=""; print $0}' | awk '{sub(/^[ \t]+/, "")};1')
echo " <NicDriver>$NICDRIVER</NicDriver>" >> $CI
# Get NIC Driver Version
NICDRIVERVERSION=$(nmcli dev list | grep -m 1 GENERAL.DRIVER-VERSION | awk '{$1=""; print $0}' | awk '{sub(/^[ \t]+/, "")};1')
echo " <NicDriverVersion>$NICDRIVERVERSION</NicDriverVersion>" >> $CI
# Get "ifconfig -a" information
echo " <Ifconfig>" >> $CI
echo "$(ifconfig -a)" >> $CI
echo " </Ifconfig>" >> $CI
# Get "nmcli dev list" information
echo " <NMCLI> " >> $CI
echo "$(nmcli dev list)" >> $CI
echo " </NMCLI> " >> $CI
# Get "nmcli -p dev wifi list" output - This lists all detected Wireless Networks
echo " <Wireless>" >> $CI
echo "$(nmcli -p dev wifi list)" >> $CI
echo " </Wireless>" >> $CI
# Get "nmcli -p con status" output - Shows the status for all known network connections
echo " <ConnectionsStatus>" >> $CI
echo "$(nmcli -p con status)" >> $CI
echo " </ConnectionsStatus>" >> $CI
# Get "nmcli -p con list" output - Lists all connections NetworkManager has
echo " <ConnectionsAll>" >> $CI
echo "$(nmcli -p con list)" >> $CI
echo " </ConnectionsAll>" >> $CI
# Get "route" information
echo " <Route>" >> $CI
echo "\"route\": " >> $CI
echo "$(route)" >> $CI
echo " " >> $CI
echo "\"route -n\": " >> $CI
echo "$(route -n)" >> $CI
echo " " >> $CI
echo "\"route -Cn\": " >> $CI
echo "$(route -Cn)" >> $CI
echo " </Route>" >> $CI
你正在一個子殼中運行它。爲什麼不直接運行它? 'nmcli dev list >> foo.txt'? –
感謝您的快速回復。我最初試圖直接按照你所說的去做,但它的行爲方式是一樣的。 foo.txt仍然是空白的。我想我把它加到了一個子殼中,我試圖讓它起作用,但是由於所有的頭撞到了桌子上,我試圖讓它工作,所以我失去了蹤跡:) –
@Marc B只是爲了確定,我重新-ran直接,而foo.txt爲空,CLI在CLI上顯示「Segmentation fault」。 –