Como obter uma entrada de histórico para exibir corretamente em várias linhas

11

Suponha que eu tenha inserido uma função no prompt do bash, em várias linhas, em vez de inseri-la em uma com ponto e vírgula:

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

Como isso pode ser exibido com caracteres reais de nova linha em vez de '\ n'?

    
por iconoclast 12.01.2014 / 21:17

1 resposta

18

Você pode ativar e desativar esse recurso no Bash usando o comando shopt . Da página man do Bash.

trecho

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.

Ativa o recurso

$ shopt -s cmdhist
$ shopt -s lithist

Desativa o recurso

$ shopt -u cmdhist
$ shopt -u lithist

Exemplo

$ shopt -s cmdhist
$ shopt -s lithist

Agora, quando eu 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
    
por 12.01.2014 / 21:47