busyboxでbashシェルスクリプトを実行すると、構文エラーが発生しました。

busyboxでbashシェルスクリプトを実行すると、構文エラーが発生しました。

busyboxでbashシェルスクリプトを実行すると、構文エラーが発生しました。

スクリプト

#!/bin/bash
for dev in `cat /proc/partitions | awk '{print $4}'`; do
if cmp -s <(head -c 2 /dev/$dev) <(echo -n -e '\x38\x6e')
then
echo "OK"
break
fi
done

エラーライン3

構文エラー: "("予期しない

ベストアンサー1

Busyboxはbashをサポートしておらず、shに似た最小限のシェルしか持っていません。構文<()はbash(および他の同様のシェル)にのみ適用されます。 POSIX sh、busybox sh、またはその他の最小シェルでは使用できません。そのため、対応するエラーが発生します。

busyboxh shで動作するようにスクリプトを取得するには、次のようにします。

match=$'\x38\x63'
for dev in $(awk '/[0-9]/{print $NF}' /proc/partitions); do
        first=$(head -c 2 /dev/$dev)
        if [ "$first" = "$match" ]
        then
                echo "OK"
                break
        fi
done

おすすめ記事