quero fazer um script bash para excluir as últimas 10 linhas do histórico que foi o que fiz, mas ainda recebo um erro
#!/bin/bash
i= history | wc -1
j= $i-10
for x in {$i..$j}
do
history -d $x
done
Não consigo descobrir o que está errado, alguma ideia?
Responder1
Existem vários erros.
eu= história | wc -1
Você tem espaços aqui, então você precisa colocar 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 existe "wc -1". Acho que você quis dizer "wc -l", que conta as linhas. Em segundo lugar, acho que você queria realmente executar este comando.
Você poderia usar:
eu=$(histórico | wc -l)
No entanto, sempre será 0 como resultado, porque você está em um subshell.
j=$i-10
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 cenários onde i é 10 ou menos.
Tente algo como:
if [[ "$i" -lt "11" ]]; então j="1"; fi
para x em {$i..$j}
Você não pode usar variáveis aqui. O resultado será #..# em vez de uma lista de números. Você poderia contornar esse problema criando uma instrução de uma linha para do done que é ecoada em uma variável e então usar eval para realmente executá-la. Desta forma, $i e $j já terão sido substituídos pelos números reais quando o comando for executado.
Em última análiseno entanto,toda a abordagem é inútil, porque quando você executa o comando history no shell script você obterá zero como resultado da contagem, porque você está em um subshell e os subshells não relatam seu histórico. Para entender o que quero dizer, execute vários comandos e, em seguida, execute este script:
#!/bin/bash história | wc-l
Como você pode ver, o resultado é 0. Por quê? Porque é o histórico do subshell, e o subshell não relata o histórico. Mesmo se você adicionar outros comandos ao script antes do comando de histórico, o resultado será 0.
Recomeçar. Procure editar o arquivo de histórico diretamentecomo @kos sugeriu. Lembre-se de que os comandos do shell atual não são gravados no arquivo até que o shell seja encerrado.
Boa sorte.