Armadilloフォーラム

check_status: command not found

kiso.masaki

2022年2月17日 16時55分

ご担当者様

いつもお世話になっております。

先日、AGX3142-C03Zを購入させていただき、
本日アプリケーションをセットアップするための以下のようなshを動作させています。

shを実行すると、`check_status: command not found`となり、`check_status`が動作しませんが、
check_statusが実行できない原因に思い当たる点などあれば、ご教示をお願いいたします。

g3-setup.sh

#!/bin/bash
 
# timezone
timedatectl set-timezone Asia/Tokyo
ntpdate ntp.nict.jp
check_status
root@armadillo:~/shell# ./g3-setup.sh
17 Feb 15:24:20 ntpdate[9557]: adjust time server 133.243.238.164 offset 0.177618 sec
./g3-setup.sh: line 23: check_status: command not found
root@armadillo:~# uname -a
Linux armadillo 4.9.133-at21 #2 SMP PREEMPT Tue Jul 27 08:24:15 JST 2021 armv7l GNU/Linux
root@armadillo:~#
コメント

古関です。

エラー内容としては、check_statusコマンド、
またはcheck_status関数が存在しないという内容です。

Armadillo-IoT G2の世代だと、
起動スクリプトの共通関数にcheck_status関数がありますが、
これを想定しているでしょうか。

-----------------------------------
/etc/init.d/functions

check_status()
{
local status=$?
/bin/echo -en "\\033[65G"
if [ $status = 0 ]
then
/bin/echo -en "\\033[1;32m"
/bin/echo -n "done"
else
/bin/echo -en "\\033[1;31m"
/bin/echo -n "failed"
fi
/bin/echo -e "\\033[0;39m"
}
-----------------------------------

もしそうであれば、g3-setup.shの中に上記関数を定義すれば、動作すると思います。

古関さん

いつもお世話になっております。

ご回答ありがとうございます。

> Armadillo-IoT G2の世代だと、
> 起動スクリプトの共通関数にcheck_status関数がありますが、
> これを想定しているでしょうか。

AGX3142-C03Zは、G3なのでcheck_status関数は存在する認識です。
なので、スクリプトに関数を記述する必要はないと考えていました。

> 古関です。
>
> エラー内容としては、check_statusコマンド、
> またはcheck_status関数が存在しないという内容です。
>
> Armadillo-IoT G2の世代だと、
> 起動スクリプトの共通関数にcheck_status関数がありますが、
> これを想定しているでしょうか。
>
> -----------------------------------
> /etc/init.d/functions
>
> check_status()
> {
> local status=$?
> /bin/echo -en "\\033[65G"
> if [ $status = 0 ]
> then
> /bin/echo -en "\\033[1;32m"
> /bin/echo -n "done"
> else
> /bin/echo -en "\\033[1;31m"
> /bin/echo -n "failed"
> fi
> /bin/echo -e "\\033[0;39m"
> }
> -----------------------------------
>
> もしそうであれば、g3-setup.shの中に上記関数を定義すれば、動作すると思います。

アットマークテクノの古賀です。

kiso.masakiさん:
>ご回答ありがとうございます。
>
>>Armadillo-IoT G2の世代だと、
>>起動スクリプトの共通関数にcheck_status関数がありますが、
>>これを想定しているでしょうか。
>
>AGX3142-C03Zは、G3なのでcheck_status関数は存在する認識です。

いえ、G3 のディストリビューション(Debian)には check_status が存在しないのです。check_status は、Armadillo に標準搭載する Linux ディストリビューションを Debian に切り替える前、弊社独自のディストリビューションとして標準搭載していた、atmark-dist に存在していたシェル関数なのです:
 https://github.com/atmark-techno/atmark-dist/blob/f303b110921893880a135…

>なので、スクリプトに関数を記述する必要はないと考えていました。

というわけで、G3 の場合は、check_status を自前で用意しなければいけません。

>>エラー内容としては、check_statusコマンド、
>>またはcheck_status関数が存在しないという内容です。
>>
>>Armadillo-IoT G2の世代だと、
>>起動スクリプトの共通関数にcheck_status関数がありますが、
>>これを想定しているでしょうか。
>>
>>-----------------------------------
>>/etc/init.d/functions
>>
>>check_status()
>>{
>> local status=$?
>> /bin/echo -en "\\033[65G"
>> if [ $status = 0 ]
>> then
>> /bin/echo -en "\\033[1;32m"
>> /bin/echo -n "done"
>> else
>> /bin/echo -en "\\033[1;31m"
>> /bin/echo -n "failed"
>> fi
>> /bin/echo -e "\\033[0;39m"
>>}
>>-----------------------------------
>>
>>もしそうであれば、g3-setup.shの中に上記関数を定義すれば、動作すると思います。

atmark-dist での check_status の実装は上の通りですが、要は、直前に実行されたコマンドの実行結果が束縛されているシェル変数 $? の値を見て、成功(0)
なら 'done'、成功していなければ 'failed' を出力する、という動作ですから、次のページで例示されているように、

check_status()
{
  if [ $? = 0 ]
  then
    echo "OK"
  else
    echo "FAILED"
  fi
}

と書いてもよいでしょう。
 https://linuxgazette.net/issue49/misc/beekmans/LFS-HOWTO-10.html

古関さん

いつもお世話になっております。

ご回答ありがとうございます。

以下、承知しました。
お知らせいただいたスクリプトも参考にし、活用させていただきます。

> いえ、G3 のディストリビューション(Debian)には check_status が存在しないのです。check_status は、Armadillo に標準搭載する Linux ディストリビューションを Debian に切り替える前、弊社独自のディストリビューションとして標準搭載していた、atmark-dist に存在していたシェル関数なのです:
>  https://github.com/atmark-techno/atmark-dist/blob/f303b110921893880a135…
>

以上です。
よろしくお願いいたします。