2017-09-10 24 views
-1

我寫了這個bash腳本來自動配置網絡,它輸出ping: www.google.com: Name or service not knoew,但是網絡已經連接了,我輸入ping www.google.com它工作的很完美。在netctl啓動後ping失敗

有沒有在我的代碼中有錯?或bash中的任何異步功能?

function network_install() { 
    if [ -n "$WIFI_INTERFACE" ]; then 
     cp /etc/netctl/examples/wireless-wpa /etc/netctl 
     chmod 600 /etc/netctl/wireless-wpa 
     sed -i 's/^Interface=.*/Interface='"$WIFI_INTERFACE"'/' /etc/netctl/wireless-wpa 
     sed -i 's/^ESSID=.*/ESSID='"$WIFI_ESSID"'/' /etc/netctl/wireless-wpa 
     sed -i 's/^Key=.*/Key='"$WIFI_KEY"'/' /etc/netctl/wireless-wpa 
     if [ "$WIFI_HIDDEN" == "true" ]; then 
      sed -i 's/^#Hidden=.*/Hidden=yes/' /etc/netctl/wireless-wpa 
     fi 
     netctl start wireless-wpa 
    fi 

    ping -c 5 $PING_HOSTNAME 
    if [ $? -ne 0 ]; then 
     echo "ERROR!! connect failed." 
     exit 
    fi 
} 
+0

可能是網絡接口建立連接的延遲。建議在該ping命令之前放置超時。 – Trickycm

+0

變量$ PING_HOSTNAME是絕對正確的,它讓我感到困惑的是,它在網絡連接語句後失效了,但是當我在函數執行後輸入時,ping成功了 – litbear

+0

實際接口的連接延遲如何?或許在ping之前的函數中超時,以使接口有機會連接。 – Trickycm

回答

0

尤里卡!

聲明netctl start wireless-wpa不會等待網絡連接或沒有,因此它是異步的。使用netctl wait-online <config-file-name>等待操作完成。