Você está usando operadores e sintaxe semelhantes a Bash ( $(command)
, ${...//}
), mas executando por sh
, que no Android não é Bash por padrão.
O objetivo principal é enviar um arquivo dividido para um andróide e juntá-lo com um script .sh, o arquivo é dividido em partes de 5MB, mas seu tamanho total é desconhecido (tentando fazer um script universal), eu ve dividiu o arquivo e transferiu as partes do arquivo e o script para um diretório dentro do dispositivo android e executou o .sh com adb shell sh script.sh. tudo é ok mas o comando dd que não aceita uma variável
file="$(ls /data/local/tmp/ | grep -i --include="*.tul" tul)"
echo file is "$file"
name="${file%.*}"
echo short name is "$name"
tmp="${file: -3}";
num=${tmp//[!0-9]/}
echo number of files is "$num"
N="${name}.part1"
dd if="/data/local/tmp/$"${name}.part1"" of=/data/local/tmp/cust bs=1024 count=5120
i=1
while [ $i -le $num ]; do
dd if="/data/local/tmp/$"${name}.part1""$i"" of="/data/local/tmp/cust" bs=1024 count=5120 seek="$((($i-1)*5120))"
let i=i+1
done
echo DONE
exit
a saída normalmente é que o final do nome corta o começo e eu recebo dd se não houver esse arquivo ou diretório significado
/data/local/new_file.part1
becomes something like .part1local/new_file
enquanto no comando lind adb shell ele funciona OK
adb shell
>dd if="/data/local/tmp/$"${name}.part1"" of=/data/local/tmp/cust bs=1024 count=5120
$ file é um arquivo de índice que tem o nome da parte e o número total deles gerado pelo código de divisão (em java)
editar:
dd if=/data/local/tmp/"$name".part"$i" of=/data/local/tmp/cust bs=1024 count=5120 seek="$((($i-1)*5120))"
trabalhando na linha de comando (adb shell), mas ao executar o arquivo .sh, obtenho
.part2: No such file or directory
Você está usando operadores e sintaxe semelhantes a Bash ( $(command)
, ${...//}
), mas executando por sh
, que no Android não é Bash por padrão.
Tags bash android dd linux shell-script