Cómo hacer que una entrada del historial se muestre correctamente en varias líneas

15

Supongamos que he ingresado una función en el indicador de bash, en varias líneas en lugar de exprimirla en una con punto y coma:

$ function blah {
  echo blah
}
$ history -1
12690  function blah {\necho blah\n}

¿Cómo hacer que esto se muestre con caracteres reales de nueva línea en lugar de '\ n'?

iconoclasta
fuente

Respuestas:

21

Puede habilitar y deshabilitar esta característica dentro de Bash usando el shoptcomando. Desde la página de manual de Bash.

extracto

cmdhist   If set, bash attempts to save all lines of a multiple-line
          command in the same history entry.  This allows  easy  re-editing 
          of multiline commands.

lithist   If  set,  and the cmdhist option is enabled, multi-line commands 
          are saved to the history with embedded newlines rather than using 
          semicolon separators where possible.

Habilita la función

$ shopt -s cmdhist
$ shopt -s lithist

Deshabilita la función

$ shopt -u cmdhist
$ shopt -u lithist

Ejemplo

$ shopt -s cmdhist
$ shopt -s lithist

Ahora cuando corro history:

   70  text=$(cat<<'EOF'
hello world\
foo\bar
EOF)
   71  text=$(cat<<'EOF'
hello world\
foo\bar
EOF
)
   72  ls
   73  cd IT/
...
...
  414  shopt -s lithist 
  415  history | less
  416  function blah {
  echo blah
}
  417  history | less
slm
fuente