bash-скрипт для удаления последних 10 строк в histroy

bash-скрипт для удаления последних 10 строк в histroy

Я хочу создать bash-скрипт для удаления последних 10 строк в истории, это то, что я сделал, но я все еще получаю ошибку.

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

Я не могу понять, в чем дело. Есть идеи?

решение1

Есть несколько ошибок.

я= история | wc -1

У вас здесь есть пробелы, поэтому вам нужно будет обернуть это в "", чтобы избежать ошибки, и, кроме того, вы добавили ненужный пробел после знака равенства. Однако все, что вы сделали, это создали переменную, содержащую "history | wc -1". Во-первых, нет "wc -1". Я думаю, вы имели в виду "wc -l", который считает строки. Во-вторых, я думаю, вы хотели на самом деле запустить эту команду.

Вы можете использовать:

я=$(история | wc -l)

Однако результатом всегда будет 0, поскольку вы находитесь в подоболочке.

j= $i-10

Вы добавили пробел после знака равенства. Вы могли бы использовать "j=$i-10", но это на самом деле не будет выполнять никаких математических операций.

Попробуйте что-то вроде:

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

Вероятно, вам захочется написать оператор if для обработки сценариев, где i равно 10 или меньше.

Попробуйте что-то вроде:

если [[ "$i" -lt "11" ]]; тогда j="1"; фи
для x в {$i..$j}

Здесь нельзя использовать переменные. Результатом будет #..# вместо списка чисел. Эту проблему можно обойти, создав однострочный оператор do done, который выводится в переменную, а затем использовать eval для его фактического выполнения. Таким образом, $i и $j уже будут заменены фактическими числами при запуске команды.

В конечном счетехотя,весь подход бессмыслен, потому что когда вы запускаете команду history в скрипте оболочки, вы получите ноль в качестве результата подсчета, потому что вы находитесь в подоболочке, а подоболочки не сообщают свою историю. Чтобы понять, что я имею в виду, выполните несколько команд, а затем запустите этот скрипт:

#!/bin/баш
история | wc -l

Как видите, результат равен 0. Почему? Потому что это история подоболочки, а подоболочка не сообщает историю. Даже если вы добавите другие команды в скрипт перед командой истории, результат будет равен 0.

Начать заново. Посмотрите, как редактировать файл истории напрямуюкак предложил @kos. Имейте в виду, что команды из текущей оболочки не записываются в файл, пока оболочка не завершит работу.

Удачи.

Связанный контент