6 votes

Comment écrire l'historique du shell Android dans un fichier

Utilisation de Émulateur de terminal pour Android Est-ce qu'il y a un moyen d'activer un historique de commande persistant ?

Jusqu'à présent, j'ai essayé ce qui suit :

  • commande initiale de export HISTFILE=$HOME/.mksh_history

  • profil mksh de l'utilisateur /data/data/jackpal.androidterm/app_HOME/.mkshrc contenant export HISTFILE=$HOME/.mksh_history

  • profil mksh du système /system/etc/mkshrc contenant export HISTFILE=/data/data/jackpal.androidterm/app_HOME/.mksh_history (bien que, de préférence, la solution n'implique pas d'écrire dans le fichier /système )

Je suis capable de faire en sorte que d'autres shells Android (ash et bash) écrivent des historiques dans le fichier app_HOME sans problème. Je suis également capable de faire en sorte que mksh écrive HISTFILE sur Linux sans problème.

0 votes

Je crois que vous ne pouvez pas, mais je ne suis pas sûr à 100%.

0 votes

Vous pouvez utiliser un projet que j'ai construit, gitlab.com/rafi-gana/superadb il suffit d'installer les conditions requises et de l'exécuter.

5voto

Stu Points 169

Développeur mksh ici.

Nous avons désactivé l'historique persistant pour mksh sur Android, afin de ne pas taxer la mémoire flash avec trop de demandes d'écriture.

Vous pouvez le réactiver dans une ROM personnalisée en paramétrant -DHAVE_PERSISTENT_HISTORY=1 en LOCAL_CFLAGS en Android.mk . Vous pouvez aussi recompiler mksh comme ça et le copier sur votre ROM, si elle est enracinée et que la version du système d'exploitation de base est la même.

De plus, vous pouvez copier n'importe quel binaire lié statiquement pour la même architecture sur le téléphone et l'utiliser. Les binaires mksh-static du paquet Debian, cependant, excluent également l'historique persistant.

Si vous pensez vraiment que cette fonctionnalité est intéressante, persuadez Google de l'activer ; pour cela, ils doivent modifier mkmf.sh et supprimez les lignes suivantes

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

puis reconstruire Android.mk à partir de celui-ci (ce qu'ils font pour chaque nouvelle version de toute façon).

Oh, et vous pourriez demander au développeur de l'émulateur de terminal pour Android d'inclure une version de mksh avec l'historique activé. Ce n'est probablement pas une mauvaise idée de toute façon, car elle sera plus récente que ce que vous obtenez dans les ROMs stock, et elle n'écrasera pas le shell du système. /system/bin/sh mais être disponible pour les utilisateurs de CLI.

Tout cela ne permet toujours pas d'activer l'historique persistant par défaut (j'y suis strictement opposé, car il s'agit d'une fonction de surveillance), mais permet aux utilisateurs de définir les paramètres suivants $HISTFILE eux-mêmes pour le permettre.

0 votes

Je suis d'accord, une offre groupée avec Terminal Emulator pour Android serait vraiment le bon endroit. JuiceSSH le fait, mais avec bash à la place. Quoi qu'il en soit, en attendant, je l'ai juste compilé et copié. Merci pour l'info !

0 votes

GNU bash est délicat à cause d'éventuels problèmes de licence (GPL) ; de plus, mksh est beaucoup plus petit et plus fluide. En outre, mksh se construit avec bionic (la libc d'Android) beaucoup plus facilement, de sorte que l'empaquetage a peu d'effort nécessaire. Content d'avoir pu aider !

0 votes

"un dispositif de surveillance" ?

0voto

5p0ng3b0b Points 124

Pour écrire l'historique du shell Android dans un fichier à partir du terminal Android, tapez

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

Si vous utilisez termux au lieu de l'émulateur de terminal, votre historique est alors préservé.

0voto

5p0ng3b0b Points 124

J'ai construit un système personnalisé mksh à partir de la source sur un dispositif Android en utilisant termux et remplacé /system/bin/sh avec lui (renommer ou sauvegarder /system/bin/sh d'abord). Vous devez installer build-essential dans termux alors :

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\""

La plupart des drapeaux de compilation proviennent de aquí . Après cela, édité /system/etc/mkshrc d'inclure export HISTFILE=/sdcard/Android/.mksh_history . Il s'agit d'une solution permanente qui fonctionne avec le shell adb à distance et qui persiste après les redémarrages. Vous pourriez copier le binaire dans le dossier d'accueil de l'émulateur de terminal et le définir comme commande shell mais ~/.mkshrc ~/mkshrc ~/.profile ne semble pas fonctionner, vous devrez donc également ajouter export ENV=/sdcard/Android/.mkshrc a /system/etc/mkshrc . Téléchargez le binaire compilé ici. sh pour Android avec historique activé

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X