bash script para excluir as últimas 10 linhas do histroy

0

Eu quero fazer um script bash para excluir as últimas 10 linhas do histórico é isso que eu fiz, mas ainda estou recebendo um erro

#!/bin/bash
i= history | wc -1
j= $i-10
for x in {$i..$j}
do
  history -d $x
done

Eu não consigo descobrir o que há de errado, alguma ideia?

    
por Adam 28.02.2016 / 19:23

1 resposta

1

Existem vários erros.

% bl0ck_qu0te%

Você tem espaços aqui, então é necessário incluir isso em "" para evitar um erro e, além disso, adicionou um espaço desnecessário após o sinal de igual. No entanto, tudo o que você fez foi criar uma variável contendo "history | wc -1". Em primeiro lugar, não há "wc -1". Eu acho que você quis dizer "wc -l", que conta as linhas. Em segundo lugar, acho que você queria realmente executar este comando.

Você pode usar:

i=$(history | wc -l)

No entanto, sempre será 0 como resultado, porque você está em uma subcamada.

% bl0ck_qu0te%

Você adicionou um espaço após o sinal de igual. Você poderia usar "j = $ i-10", mas isso não vai fazer nenhuma matemática.

Tente algo como:

j=$(echo "${i}-10" | bc -l)

Você provavelmente vai querer escrever uma instrução if para lidar com senários onde eu tiver 10 ou menos.

Tente algo como:

if [[ "$i" -lt "11" ]]; then j="1"; fi
% bl0ck_qu0te%

Você não pode usar variáveis aqui. O resultado será # .. # em vez de uma lista de números. Você poderia contornar este problema criando um one-liner para fazer a declaração que é ecoada em uma variável e então usar eval para executá-la. Desta forma, o $ i e $ j já foram substituídos pelos números reais quando o comando é executado.

Ultimamente , toda a abordagem é inútil , porque quando você executa o comando history no shell script, você recebe zero como resultado da contagem , porque você está em um subshell e subshells não relatam seu histórico. Para ver o que quero dizer, execute vários comandos e, em seguida, execute este script:

#!/bin/bash
history | wc -l

Como você pode ver, o resultado é 0. Por quê? Porque é a história do subshell, e o subshell não reporta o histórico. Mesmo se você adicionar outros comandos ao script antes do comando history, o resultado será 0.

Comece de novo. Procure editar o arquivo de histórico diretamente como sugerido pelo @kos. Lembre-se de que os comandos do shell atual não são gravados no arquivo até que o shell saia.

Boa sorte.

    
por no-reply 29.02.2016 / 08:33