从 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