6 votos

Cómo escribir el historial del shell de Android en un archivo

Utilizando Emulador de terminal para Android ¿hay alguna forma de habilitar un historial de comandos persistente?

Hasta ahora, he probado lo siguiente:

  • comando inicial de export HISTFILE=$HOME/.mksh_history

  • perfil de usuario mksh /data/data/jackpal.androidterm/app_HOME/.mkshrc que contiene export HISTFILE=$HOME/.mksh_history

  • perfil del sistema mksh /system/etc/mkshrc que contiene export HISTFILE=/data/data/jackpal.androidterm/app_HOME/.mksh_history (aunque preferiblemente la solución no implica escribir en /sistema )

Soy capaz de conseguir que otros shells de Android (ash y bash) escriban historiales en app_HOME sin problemas. También soy capaz de hacer que mksh escriba HISTFILE en Linux sin problemas.

0 votos

Creo que no se puede, pero no estoy 100% seguro.

0 votos

Puedes usar un proyecto que he construido, gitlab.com/rafi-gana/superadb sólo hay que instalar los requisitos y ejecutarlo.

5voto

mirabilos Puntos 165

Desarrollador de mksh aquí.

Desactivamos el historial persistente para mksh en Android, para no gravar la memoria flash con demasiadas peticiones de escritura.

Puedes volver a habilitarlo en una ROM personalizada configurando -DHAVE_PERSISTENT_HISTORY=1 en LOCAL_CFLAGS en Android.mk . También puedes recompilar mksh así y copiarlo en tu ROM, si está rooteada y la versión del SO base es la misma.

Además, puede copiar cualquier binario enlazado estáticamente para la misma arquitectura en el teléfono y utilizarlo. Los binarios mksh-static del paquete de Debian, sin embargo, también excluyen el historial persistente.

Si realmente crees que esta función merece la pena, convence a Google para que la habilite; para ello, tienen que editar mkmf.sh y eliminar las siguientes líneas

# even the idea of persistent history on a phone is funny
HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY

y luego reconstruir Android.mk a partir de ella (lo que hacen para cada nueva versión de todos modos).

Ah, y podrías pedir al desarrollador del Emulador de Terminales para Android que incluya una versión de mksh con el historial activado. Esto probablemente no es una mala idea de todos modos, ya que será más nuevo que lo que se obtiene en las ROMs de stock, y no va a sobrescribir el shell del sistema /system/bin/sh pero que esté disponible para los usuarios de la CLI.

Todo eso aún no habilita el historial persistente por defecto (me opongo terminantemente a ello, ya que es una función de vigilancia), pero permite a los usuarios establecer $HISTFILE para habilitarla.

0 votos

Estoy de acuerdo, incluido en el emulador de terminal para Android sería realmente el lugar adecuado. JuiceSSH lo hace, pero con bash en su lugar. De todas formas, mientras tanto lo he compilado y lo he copiado. Gracias por la información.

0 votos

GNU bash es complicado debido a posibles problemas de licencia (GPL); además, mksh es mucho más pequeño y suave. Además, mksh se construye con bionic (la libc de Android) con mucha más facilidad, por lo que el bundling requiere poco esfuerzo. ¡Me alegro de haber podido ayudar!

0 votos

¿"un elemento de vigilancia"?

0voto

5p0ng3b0b Puntos 24

Para escribir el historial del shell de Android en un archivo desde el terminal de Android, escriba

history > /path/to/file/history.txt

Si utilizas termux en lugar del emulador de terminal, entonces tu historial se conserva.

0voto

5p0ng3b0b Puntos 24

Construí una costumbre de trabajo mksh desde la fuente en un dispositivo Android usando termux y reemplazado /system/bin/sh con él (renombrar o hacer una copia de seguridad /system/bin/sh primero). Es necesario instalar build-essential en termux entonces:

wget http://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R57.tgz
tar -xvf mksh-R57.tgz
cd mksh
mkdir build
cd build
sh ../Build.sh -o CFLAGS="-Wall -Werror -Wno-deprecated-declarations -fno-asynchronous-unwind-tables -fno-strict-aliasing -fwrapv -DDEBUG_LEAKS -DMKSH_ASSUME_UTF8 -DMKSH_DONT_EMIT_IDSTRING -DKSH_VERSIONNAME_VENDOR_EXT=\" Android\" -DMKSH_BUILDSH -D_GNU_SOURCE -DSETUID_CAN_FAIL_WITH_EAGAIN -DHAVE_STRING_POOLING=1 -DHAVE_ATTRIBUTE_BOUNDED=1 -DHAVE_ATTRIBUTE_FORMAT=1 -DHAVE_ATTRIBUTE_NORETURN=1 -DHAVE_ATTRIBUTE_PURE=1 -DHAVE_ATTRIBUTE_UNUSED=1 -DHAVE_ATTRIBUTE_USED=1 -DHAVE_SYS_TIME_H=1 -DHAVE_TIME_H=1 -DHAVE_BOTH_TIME_H=1 -DHAVE_SYS_BSDTYPES_H=0 -DHAVE_SYS_FILE_H=1 -DHAVE_SYS_MKDEV_H=0 -DHAVE_SYS_MMAN_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SYSMACROS_H=1 -DHAVE_BSTRING_H=0 -DHAVE_GRP_H=1 -DHAVE_IO_H=0 -DHAVE_LIBGEN_H=1 -DHAVE_LIBUTIL_H=0 -DHAVE_PATHS_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_ULIMIT_H=0 -DHAVE_VALUES_H=0 -DHAVE_CAN_INTTYPES=1 -DHAVE_CAN_UCBINTS=1 -DHAVE_CAN_INT8TYPE=1 -DHAVE_CAN_UCBINT8=1 -DHAVE_RLIM_T=1 -DHAVE_SIG_T=1 -DHAVE_SYS_ERRLIST=0 -DHAVE_SYS_SIGNAME=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_FLOCK=1 -DHAVE_LOCK_FCNTL=1 -DHAVE_GETRUSAGE=1 -DHAVE_GETSID=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_KILLPG=1 -DHAVE_MEMMOVE=1 -DHAVE_MKNOD=0 -DHAVE_MMAP=1 -DHAVE_FTRUNCATE=1 -DHAVE_NICE=1 -DHAVE_REVOKE=0 -DHAVE_SETLOCALE_CTYPE=1 -DHAVE_LANGINFO_CODESET=1 -DHAVE_SELECT=1 -DHAVE_SETRESUGID=1 -DHAVE_SETGROUPS=1 -DHAVE_STRERROR=1 -DHAVE_STRSIGNAL=0 -DHAVE_STRLCPY=1 -DHAVE_FLOCK_DECL=1 -DHAVE_REVOKE_DECL=1 -DHAVE_SYS_ERRLIST_DECL=0 -DHAVE_SYS_SIGLIST_DECL=1 -DHAVE_PERSISTENT_HISTORY=1 -DMKSH_BUILD_R=571 -DMKSH_DEFAULT_PROFILEDIR=\"/system/etc\" -DMKSHRC_PATH=\"/system/etc/mkshrc\" -DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\" -DMKSH_DEFAULT_TMPDIR=\"/data/local\" -static -PREFIX=\"/system\""

Obtuve la mayoría de las banderas de compilación de aquí . Después de eso, editado /system/etc/mkshrc para incluir export HISTFILE=/sdcard/Android/.mksh_history . Esta era una solución permanente por lo que funcionaba con adb shell remoto y persistente después de los reinicios. Usted podría copiar el binario a la carpeta de inicio del emulador de terminal y establecerlo como el comando de shell, pero ~/.mkshrc ~/mkshrc ~/.profile no parece funcionar, por lo que también tendrá que añadir export ENV=/sdcard/Android/.mkshrc a /system/etc/mkshrc . Descargue el binario compilado aquí. sh para Android con el historial activado

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X