从 busybox 执行 bash shell 脚本时出现语法错误

从 busybox 执行 bash shell 脚本时出现语法错误

从 busybox 执行 bash shell 脚本时出现语法错误

脚本

#!/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 的 shell。该<()语法特定于 bash(以及其他一些类似的 shell)。它不能与 POSIX sh 或 busybox sh 或任何其他最小 shell 一起使用。这就是您收到该错误的原因。

要让您的脚本与 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

相关内容