Я хочу создать 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. Имейте в виду, что команды из текущей оболочки не записываются в файл, пока оболочка не завершит работу.
Удачи.