2017-09-10 18 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>を使用してください。

関連する問題