Comandos Echo & redirect bash history!

2

É possível ecoar e redirecionar comandos de histórico para um arquivo de script pelo comando ! ? Existe variação dos comandos pipe , redirect ou tee que estou ignorando?

  518  xmodmap -e "keycode 66 = Return"
  519  xmodmap -e "keycode 23 = Tab"
  535  xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

[Tech_Ministry@localhost ~]$ echo !535 && !518 >> xmodmap_-e.sh 
echo xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' && xmodmap -e "keycode 66 = Return" >> xmodmap_-e.sh 
xmodmap -e clear Lock -e keycode 0x42 = Escape

Depois de ler isto, postar eu tentei echo !535:p && !518:p >> xmodmap_-e.sh

Eu sinto como se estivesse faltando algo simples .. É possível fazer isso? É possível ecoar cada comando para uma linha separada?

    
por phillipsk 01.01.2016 / 22:16

2 respostas

3

De help history :

  -p    perform history expansion on each ARG and display the result
    without storing it in the history list

O que eu costumo fazer é, por exemplo, history -p \!572 >> myfile salvar o comando 572 do histórico.

Para o seu exemplo, eu usaria:

echo "$(history -p '!535') && $(history -p '!518')" >> xmodmap_-e.sh

embora provavelmente haja uma maneira de fazer isso com um único comando history .

(Isso coloca os dois comandos em uma única linha no arquivo de script, unido ao operador && .)

UPDATE: A forma mais simples que eu estava procurando quando escrevi isso foi:

history -p \!535 \!518 >> whatever.sh
    
por 01.01.2016 / 22:22
1

Se você colocar o marcador de histórico entre aspas duplas, poderá capturar sua expansão como uma string entre aspas:

echo "!535 && !518" >> xmodmap_-e.sh 

A razão pela qual sua tentativa publicada falhou é porque o && não foi citado, então foi acionado:

echo !535 && !518 >> xmodmap_-e.sh

Isso expandiu para os dois comandos:

echo {the expansion of !535}
&&
{run the expansion of !518} >> xmodmap_-e.sh

Assim, a primeira expansão teria sido gravada em stdout , e como o echo teria sido bem-sucedido, o segundo seria executado com qualquer resultado subsequente sendo anexado ao arquivo xmodmap_-e.sh .

    
por 02.01.2016 / 00:09