script bash para eliminar las últimas 10 líneas en histroy

script bash para eliminar las últimas 10 líneas en histroy

Quiero crear un script bash para eliminar las últimas 10 líneas del historial, eso es lo que hice, pero sigo recibiendo un error.

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

No puedo entender qué está mal, ¿alguna idea?

Respuesta1

Hay varios errores.

i= historia | baño -1

Tiene espacios aquí, por lo que deberá incluir esto en "" para evitar un error y, además, agregó un espacio innecesario después del signo igual. Sin embargo, todo lo que ha hecho es crear una variable que contenga "historial | wc -1". En primer lugar, no existe "wc -1". Creo que quisiste decir "wc -l", que cuenta las líneas. En segundo lugar, creo que realmente querías ejecutar este comando.

Podrías usar:

i=$(historial | wc -l)

Sin embargo, el resultado siempre será 0, porque estás en una subcapa.

j=$i-10

Has agregado un espacio después del signo igual. Podrías usar "j=$i-10", pero eso en realidad no servirá para hacer ningún cálculo.

Pruebe algo como:

j=$(echo "${i}-10" | antes de Cristo -l)

Probablemente querrás escribir una declaración if para manejar escenarios donde i sea 10 o menos.

Pruebe algo como:

si [[ "$i" -lt "11" ]]; entonces j="1"; fi
para x en {$i..$j}

No puedes usar variables aquí. El resultado será #..# en lugar de una lista de números. Puede solucionar este problema creando una sola línea para la declaración do done que se repite en una variable y luego usa eval para ejecutarla. De esta manera, $i y $j ya habrán sido reemplazados con los números reales cuando se ejecute el comando.

Por últimoaunque,todo el enfoque es inútil, porque cuando ejecuta el comando de historial en el script de shell obtendrá cero como resultado del recuento, porque está en un subshell y los subshells no informan su historial. Para ver a qué me refiero, ejecute varios comandos y luego ejecute este script:

#!/bin/bash
historia | baño -l

Como puedes ver, el resultado es 0. ¿Por qué? Porque es el historial del subnivel y el subnivel no informa el historial. Incluso si agrega otros comandos al script antes del comando de historial, el resultado será 0.

Comenzar de nuevo. Considere editar el archivo de historial directamentecomo ha sugerido @kos. Tenga en cuenta que los comandos del shell actual no se escriben en el archivo hasta que se cierra el shell.

Buena suerte.

información relacionada