shell - ejecutar - guardar historial de comandos linux
¿Cómo guardar/registrar la salida del shell iex para obtener un historial de comandos persistente? (2)
En Erlang / OTP-20 y superior
Desde Erlang / OTP-20rc2, el historial de Shell se admite de forma inmediata (aunque inicialmente está deshabilitado de forma predeterminada) a través de un puerto de esta biblioteca a la base de códigos Erlang / OTP. Habilite el shell en estas versiones configurando la variable de entorno del kernel
shell_history
en habilitado con laexport ERL_AFLAGS="-kernel shell_history enabled"
agregado a sus variables de entorno (consulte Opciones de configuración para ver más opciones).
- https://github.com/ferd/erlang-history
Pre Erlang / OTP-20:
He encontrado 2 maneras de hacerlo.
1. Historia de Erlang
erlang-history (eh) es un pequeño par de archivos que se pueden usar para parchear un sistema Erlang-OTP para agregar soporte para el historial en el shell de Erlang.
El historial admitido es el que está disponible a través de las flechas arriba / abajo en el teclado.
Instalación en Ubuntu Linux:
sudo su
cd /usr/local/src
git clone https://github.com/ferd/erlang-history.git
cd erlang-history
make install
Ahora cada REPL basado en Erlang ahora iniciado (y eso es IEx) debería usar erlang-history
.
2. rlwrap
Como alternativa, puede probar un reforzador / reforzador REPL más genérico rlwrap que es un "contenedor de línea de lectura":
... una pequeña utilidad que utiliza la biblioteca readline de GNU para permitir la edición de entrada de teclado para cualquier comando.
rlwrap -a -A iex -S mix
(En caso de que estés usando Ubuntu Linux: sudo apt-get install rlwrap
)
Le permite agregar muchas más funciones al REPL como, por ejemplo, el filtro rlwrap -a -z pipeto iex
que le permite canalizar elementos a comandos de shell - muy útil para leer documentación, es decir: iex> h Stream | less
iex> h Stream | less
( more )
Conozca las desventajas:
- Rompe la finalización del código (es decir, la finalización de la pestaña) en IEx
¿Por qué esta característica tan útil - el historial de comandos - no está incluido en Elixir / Erlang?
Acabo de empezar a trabajar con Elixir y he estado usando bastante el shell iex
. ¿Es posible para mí guardar / registrar una "sesión" en un archivo?
Gracias.
No actualmente. Sin embargo, probablemente podrías escribir un pequeño plugin de iex para hacer esto por ti. Por ejemplo, tengo el siguiente archivo en ~/.iex.exs
:
# .iex.exs
defmodule IExHelpers do
def reload! do
Mix.Task.reenable "compile.elixir"
Mix.Task.run "compile.elixir"
end
end
iex = IExHelpers
# $ iex -S mix
# iex(2)> iex.reload!
# :noop
Esto vuelve a compilar el proyecto actual y lo vuelve a cargar mientras aún se encuentra dentro de un shell iex -S mix
con la iex -S mix
. Probablemente podrías escribir algo para guardar el historial del shell actual en un archivo y leerlo al inicio, pero no estoy seguro de por dónde empezarías con eso.