'сервисная nfs' (/etc/init.d/nfs
) клиент NFS. Для запуска сервера NFS необходимо использовать service nfsserver start
Вы, возможно, должны были бы установить nfs-kernel-server
пакет (если это уже не установлено).
Можно использовать history -d offset
встроенный для удаления определенной строки из истории текущей оболочки, или history -c
очистить целую историю.
Это не действительно практично, если Вы хотите удалить диапазон строк, так как это только берет смещение того в качестве аргумента, но Вы могли перенести его в функцию с циклом.
rmhist() {
start=$1
end=$2
count=$(( end - start ))
while [ $count -ge 0 ] ; do
history -d $start
((count--))
done
}
Назовите его с rmhist first_line_to_delete last_line_to_delete
. (Номера строки согласно выводу history
.)
(Используйте history -w
вызвать запись в файл истории.)
Поможет только одна строка в командной строке.
for i in {1..N}; do history -d START_NUM; done
Где START_NUM - начальная позиция записи в истории. N - количество записей, которые вы можете удалить.
пример: для i в {1..50}; сделать историю -d 1030; done
Ответ пользователя 2982704 почти сработал, но не совсем. Пришлось сделать такую небольшую вариацию.
Предполагая, что моя история равна 1000, и я хочу удалить последние 50 записей
start=1000
for i in {1..50}; do count=$((start-i)); history -d $count; done
Если удалить строку N
из истории, то строка N+1
перемещается на позицию N
и т.д.
По этой причине я предпочитаю определять строки истории oldest
и newest
, между которыми я хочу удалить всю историю. (Примечание:oldest
<newest
).
Если, например, я хочу удалить строки истории с oldest = 123
по newest = 135
, я бы написал:
$ for i in {135..123}; do history -d $i ; done
Мне легче читать; помимо :команда for
также может уменьшать диапазон...
Это должно удалить каждую запись списка истории в обратном порядке N раз:
function hd { for i in $(seq 1 $1); do history -d $(($HISTCMD-1)); done; }
Если вы хотите добавить это в свой.bashrc, используйте:
echo "function hd { for i in $(seq 1 $1); do history -d \$((\$HISTCMD-1)); done; }">>~/.bashrc
...и затем source ~/.bashrc
, чтобы перезагрузить конфигурацию bash. Использовать как:
hd <N>, where N is the number of lines to delete
См. мой другой ответ для другого подхода, который не работает, но длинный и сложный.
РЕДАКТИРОВАТЬ :Для формы командной строки используйте это:
for i in {1..10}; do history -d $(($HISTCMD-11)); done
Также см. этот вопрос:
https://stackoverflow.com/questions/14750650/how-to-delete-history-of-last-10-commands-in-shell
history
Баш, построенный -в команде, также занимает диапазон, теперь в 2020 году:
-d offset
Delete the history entry at position offset. If offset is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the end of the history, and an index of -1 refers to the current history -d command.
-d start-end
Delete the history entries between positions start and end, inclusive. Positive and negative values for start and end are interpreted as described above.
Только сама команда не говорит с--help
:
Options:
-c clear the history list by deleting all of the entries
-d offset delete the history entry at position OFFSET. Negative
offsets count back from the end of the history list
-a append history lines from this session to the history file
...
. history -d 2031-2034
удаляет сразу четыре строки. Вы можете использовать $HISTCMD
для удаления самых новых N строк в обратном направлении.
Вы также можете экспортировать с помощью history -w tmpfile
, затем отредактировать этот файл, очистить с помощью history -c
и затем прочитать обратно с помощью history -r tmpfile
. Не записывать в .bash _историю .
Прежде чем я откажусь от этого альтернативного подхода, я хочу записать то, что я узнал. Часть моих трудностей с отладкой моего первого ответа заключается в том, что немного неясно, сколько N в конечном итоге будет, потому что оно включает текущую команду, поэтому я думаю, что на самом деле это N -1 или, может быть, N -2.
Чтобы было понятнее, я пробовал решение, которое удаляло бы номер строки в будущем. И вау, какой большой сюрприз от того, насколько это сложно. Основная проблема заключается в том, что процедура истории работает в фоновом режиме, поэтому удаление, скажем, числа 50 приведет к тому, что число 51 теперь станет 50 менее чем за секунду. Поэтому я попытался создать функцию для удаления в обратном направлении с конца. И при попытке удалить 10 подряд, получается около 5, прежде чем закончатся команды, когда они сместятся вниз. Поэтому я попытался создать функцию для удаления переадресаций, и по какой-то причине она получает только все остальные.В соответствии с подпрограммой истории, работающей примерно вдвое медленнее, чем функция. Я также пробовал вставлять сон в определенные моменты.
Я попытался временно отключить историю, но затем $HISTCMD показал итоговую сумму из $HISTFILE, а не список истории. Так что это выглядит маловероятным. Моя цель состояла в том, чтобы почистить историю от ненужных команд, чтобы я мог запомнить номер удара! #и используйте те же для частых и сложных команд.
Вот некоторые функции, которые я пробовал. Может быть, кто-то может улучшить или продиагностировать:
Going from the Number to the end:
function hd2 { a=$HISTCMD; echo $a; echo $1; echo $(($a%$1)); for i in $(seq $1 $a); do echo $i; history -d $i; done; }
Deleting from the end repeatedly with sleep:
function hd3 { a=$HISTCMD; echo $a; echo $1; echo $(($a%$1)); for i in $(seq 1 $a); do history -d $HISTCMD; sleep 1; done; }
Deleting the Number repeatedly with sleep:
function hd4 { a=$HISTCMD; echo $a; echo $1; echo $(($a%$1)); for i in $(seq 1 $a); do history -d $1; sleep 1; done; }
Начальная эхо-переменная предназначена для отладки. % - это остаток или мод. $HISTCMD не выполняет подстановку команд и должна быть назначена как переменная.
новая идея :, поскольку приведенная ниже функция работает при повторном использовании:
echo "function hdn { history -d \$1; }">>~/.bashrc
echo "function hdn2 { for i in $(seq 1 \$2); history -d \$1; sleep 1; done; }">>~/.bashrc
Пробовал с помощью приведенной ниже команды, все работает нормально
end=`history| awk 'END{print $1}'`
start=`history| awk 'END{print $1-10}'`
awk -v end="$end" -v start="$start" '{for(i=start;i<=end;i++){print "history -d" " " i};exit}’|sh
Что отличается в этом ответе :он также отображает то, что удаляется.
Для тех, кто использует Bash 4.x (, например. в Centos 7 и ниже )я использую это для удаления последних N элементов в истории , включая команду для этого. (здесь N=5)
for i in {1..5}; do echo "clearing line $(($HISTCMD-2)): $(history -p \!$(($HISTCMD-2)))"; history -d $(($HISTCMD-2)); done; history -d $(($HISTCMD-1))
Чтобы удалить строки истории между n и m (, например. здесь 544 и 541 ), я использую следующие. ПРИМЕЧАНИЕ :сначала необходимо ввести больший номер строки, а затем меньший :
.for i in {544..541}; do echo "clearing line $i: $(history -p \!$i)"; history -d $i; done; history -d $(($HISTCMD-1))
tot_lines=$(history | wc -l)
и затем повторитесьhistory -d $(( tot_lines - $1 ))
. – PlasmaBinturong 19.01.2018, 11:13$(history | wc -l)
, существует переменная$HISTCMD
это может использоваться. – PlasmaBinturong 19.01.2018, 11:58