Estimados desarrolladores,
Tengo un problema con mi script al pasar de Android 9 a 10 (dispositivos de un Umidigi S3 Pro a un Umidigi F2).
He instalado Bosybox App en el primero y el módulo Busybox Magisk en el segundo.
Ahora el script no funciona porque el comando:
list=(`busybox find "$dirs" -type f -name *.$ext`)
devuelve un array vacío.
Este es el script:
#!/system/bin/sh
echo
if test "$1" = ""; then
echo "Randomfile script by Uranya <uranya7x@xxx.xxx> v1.4 01.01.2021"
echo "Usage:"
echo "sh randomfile.sh <sourcedir> <extension> <destdir>"
exit 1
fi
dirs=$1
ext=$2
dird=$3'/'
dest=$dird'random'
delim1=""
delim2=""
last='last.txt'
# create filename's array
IFS=$'\n'
list=(`busybox find "$dirs" -type f -name *.$ext`)
# count number of files
num=${#list[@]}
# generate random number in range 1-NUM
let "ran=(${RANDOM} % ${num})+ 1"
echo Random from $num files is $ran
sour=${list[ran]}
sourn=${sour#$dirs}
sourn=${sourn:1:${#sourn}}
date=$(date +"%Y.%m.%d %H:%M")
day=$(date +"%d")
hour=$(date +"%H")
minute=$(date +"%M")
message='---------------------------------------\n'$date' - '$num' >>> '$ran'\n'$delim1$sourn$delim2
if ([ "$day" = "01" ] && [[ "$minute" < "29" ]]) || [ ! -f $dird$last ]; then
echo >$dird$last $message
else
sed -i '1i'$message $dird$last
fi
echo $delim1$sourn$delim2
# rename the old file
cp $dest.$ext $dest'_back.'$ext
# copy the file
cat "$sour" >$dest.$ext
echo File copied as $delim1$dest.$ext$delim2
¿Pueden ayudarme a entender por qué ocurre esto y cómo solucionarlo? ¡Muchas gracias por su atención!
0 votos
Habiendo hecho algunas pruebas he encontrado esto: abriendo una terminal con privilegios de Root y ejecutando --- echo
find /storage/7BC3-1805/Music/MP3/Abba -type f -name *.mp3
--- devuelve dos cadenas que contienen los nombres de los archivos dentro de esa carpeta, pero al ponerlo en mi script sigue devolviendo un array vacío, así que el problema no está en el acceso a la carpeta, sino en la sintaxis, supongo (el código find está dentro de los backticks) por lo que es como: echo <BT>find.... *.mp3<BT>0 votos
¿qué shell está ejecutando el script? Android por defecto es mksh (MirBSD korn shell). sólo bash soporta arrays, ponga shebang a algo como #! /data/data/com.termux/files/usr/bin/bash
0 votos
@alecxs ¡Gracias por señalarlo!