0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Edison(busybox)のshで終了ステータスで条件分岐するときの注意

Posted at
  • pingを実行し続けて、応答が返ってくるまで待機するという動作をさせたい
    • ネットワークアダプタが通信状態になるのを待ったりとか
  • Macのbash(GNU bash, 4.3.42)だと以下のコードが期待通りの動きをする
  • Edisonのログインシェルで、スクリプトをワンライナーとして実行すると期待通りの動作をする
  • スクリプトをファイルに書いて、sh ping.shとすると、[ "$?" -eq 0 ]の結果がなぜか必ずtrueになってしまい期待通りの動作をしない
ping.sh
#!/bin/sh
while :
do
  ping -c 1 8.8.8.8
  if [ "$?" -eq 0 ]
  then
    echo "network connected"
    break;
  else
    sleep 1
  fi
done
  • 以下のように終了ステータスをいちど変数に書き出したら期待通りの動作になった
ping.sh
#!/bin/sh
while :
do
  ping -c 1 8.8.8.8
  ping_status="$?"
  if [ $ping_status -eq 0 ]
  then
    echo "network connected"
    break;
  else
    sleep 1
  fi
done

なんなんだろうこれ。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?