Hay esta máquina que solo sh
está disponible y cut
no tiene --output-delimiter
opción pero necesito trabajar con arreglos, lo intenté de esta manera, funciona en mi máquina de trabajo, pero la falta de ella --output-delimiter
me impide ir más lejos.
¿Cómo debo proceder para mantener los mismos resultados que mi máquina de trabajo con estas limitaciones?
No puedo usarlo -d '\n'
porque tiene más de un carácter, mi método de formación arroja nuevas líneas en lugar de espacios. Las herramientas comunes pueden tener funciones reducidas (como lo consideró oportuno el que compiló Busybox). Los comandos que no están disponibles en Busybox no estarán disponibles.
#!/system/bin/sh
count=0
LOG=/data/media/0/Logs/MountBind.log
SDID="C10E-14EE"
SOURCES=""
SOURCES="${SOURCES} /storage/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/default/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/read/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/write/MicroSD/Data";
TARGETS=""
TARGETS="${TARGETS} /storage/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/default/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/read/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/write/$SDID/Data";
mountbind() {
for SOURCE in $SOURCES; do
count=$((count + 1))
echo $SOURCE >>$LOG
su --mount-master mount -o bind $SOURCE $(echo $TARGETS | cut -d ' ' -f$count --output-delimiter=\n) 1>>$LOG
done
}
mountbind
echo "\n******************************************\nMount output\n******************************************" >> $LOG
mount >> $LOG
chown 1023:1023 $LOG
chmod 770 $LOG
Respuesta1
Penosamente.
Lo que puedes hacer es usar awk en su lugar. Awk, incluso BusyBox awk, puede hacer la mayor parte de lo que puede hacer un shell, solo que con más sobrecarga sintáctica. Y tiene matrices asociativas, tantas como quieras. Puede llamar comandos externos a través de system
. Incluso hay funciones de redirección y canalización, aunque son más limitadas que en un shell.
Si desea un script awk que no reciba ninguna entrada, coloque todo el código en un BEGIN
bloque.
En tu caso, si entiendo lo que quieres hacer correctamente, no necesitas awk. No es necesario cut
procesar la TARGET
cadena: utilice la expansión de parámetros. BusyBox ash and sish tanto a apoyo ${VAR#PREFIX}
como a amigos. Esto funciona fácilmente siempre que sus caminos no contengan espacios.
mountbind() {
for SOURCE in $SOURCES; do
TARGET=${TARGETS%% *}; TARGETS=${TARGETS#* }
su --mount-master mount -o bind "$SOURCE" "$TARGET" 1>>"$LOG"
done
}