Imprimindo (salvando) o último comando de entrada do bash

6

Como posso obter o último comando executado do bash? Eu sei que !!: p imprime o último comando, mas parece que não posso usá-lo em lugar algum, exceto o prompt do bash. Eu tentei echo !!:p , mas imprime

~/Downloads$ pwd
Downloads
~/Downloads$ echo !!:p
echo pwd

Eu quero usar isso dentro da variável PROMPT_COMMAND , então preciso obtê-lo como uma string para que eu possa imprimi-lo. Existe uma maneira fácil de fazer isso? Estou procurando no lugar errado?

Eu acho que não estou claro. Eu preciso armazenar o último comando executado para que eu possa re-exibi-lo após a saída e antes do próximo prompt. Por exemplo, isso é o que eu quero que a saída seja semelhante:

~/Downloads$ pwd
Downloads

pwd
~/Downloads$

Estou fazendo isso alterando meu prompt no meu arquivo .bashrc

PROMPT_COMMAND='echo -en "3[38;5;2m"!!:p"3[0m\n"'
PS1='\W\$'

Mas !!: p só funciona corretamente a partir do prompt do bash. Então, como posso armazenar o último comando para que eu possa reimprimi-lo mais tarde?

    
por Falmarri 16.10.2010 / 01:25

1 resposta

7

Você pode acessar a linha de comando recém-executada com o history integrado. (Eu não tenho idéia porque history 1 imprime a linha de comando que acabou de ser executada, mas fc -nl -1 imprime o comando anterior, assim como fc -nl 0 .)

PROMPT_COMMAND='echo -en "3[38;5;2m"; history 1; echo -en "3[0m\n"'

Imprime um número antes do texto do comando. Aqui está uma versão que remove o número. (Pode estar incorreto se você ultrapassar as 99999 linhas do histórico, então eu não sei como o bash formata o número).

prompt_function () {
  local prompt_history="$(history 1)"
  prompt_history=${prompt_history:7}
  echo -En $'3[38;5;2m'"$prompt_history"$'3[0m\n'
}
PROMPT_COMMAND=prompt_function

(Observe que echo -en ..."$prompt_history"... expandiria as barras invertidas na linha de comando, portanto, uso echo -E e deixo a expansão do shell gerar os caracteres de controle com $'' .)

    
por 16.10.2010 / 02:14

Tags