5

Using Terminal Emulator for Android, is there a way to enable a persistent command history?

So far, I've tried the following:

  • initial command of export HISTFILE=$HOME/.mksh_history

  • user mksh profile /data/data/jackpal.androidterm/app_HOME/.mkshrc containing export HISTFILE=$HOME/.mksh_history

  • system mksh profile /system/etc/mkshrc containing export HISTFILE=/data/data/jackpal.androidterm/app_HOME/.mksh_history (though preferably the solution does not involve writing to /system)

I'm able to get other Android shells (ash and bash) to write histories into app_HOME without issue. I'm also able to get mksh to write HISTFILE on Linux without issue.

  • I believe you cannot, but I'm not 100% sure. – Nicholas Jul 26 '16 at 2:22
4

mksh developer here.

We disabled persistent history for mksh on Android, in order to not tax the flash memory with too many write requests.

You can re-enable it in a custom ROM by setting -DHAVE_PERSISTENT_HISTORY=1 in LOCAL_CFLAGS in Android.mk. You can also recompile mksh like that and copy that onto your ROM, if it’s rooted and the base OS version is the same.

Furthermore, you can copy any statically-linked binary for the same architecture on the phone and use that. The mksh-static binaries in the Debian package, however, also exclude persistent history.

If you really think this feature is worthwhile, persuade Google to enable it; for that, they need to edit mkmf.sh and remove the following lines…

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

… then rebuild Android.mk from it (which they do for every new version anyway).

Oh, and you could ask the Terminal Emulator for Android developer to bundle a version of mksh with history enabled. This is probably no bad idea anyway, as it’ll be newer than what you get in the stock ROMs, and it won’t overwrite the system shell /system/bin/sh, but be available to CLI users.

That all still won’t enable persistent history by default (I’m strictly opposed to it, as it’s a surveillance feature), but enables users to set $HISTFILE themselves to enable it.

  • I agree, bundled with Terminal Emulator for Android would really be the proper place. JuiceSSH does it, but with bash instead. Anyways, in the meantime I've just compiled it and copied it over. Thanks for the info! – Six Jul 26 '16 at 10:51
  • GNU bash is tricky due to possible licence issues (GPL); also, mksh is much smaller and smoother. Furthermore, mksh builds with bionic (Android’s libc) much more easily, so the bundling has low effort needed. Glad I could help! – mirabilos Jul 26 '16 at 10:54
  • "a surveillance feature"? – endolith Aug 30 '16 at 18:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.