Я хочу сделать простой скрипт для удаления строки из bash_history , основываясь на вводе пользователем номера строки.

echo -n "Delete History Line Number: "
read num
history -d $num

Ошибка "позиция истории вне диапазона" (чего не должно быть, я использую число в пределах диапазона).

Почему это не работает?

2 ответа2

5

Есть две причины, по которым ваш скрипт не будет работать так, как задумано:

  1. Среда bash для работающего скрипта является «неинтерактивной» и не имеет включенных функций истории.
  2. Среда bash для запущенного скрипта не зависит от среды, в которой вы работаете в интерактивном режиме.

В зависимости от вашего варианта использования простейшим решением может быть исходный код сценария, а не выполнение. Смотрите пост SU, объясняющий разницу в поиске и выполнении для получения дополнительной информации.

0

Через метод источника его работа,

мой source_file.sh содержит

# cat /root/source_file.sh
#!/bin/bash
history -d $1

и мой master_file.sh имеет строки ниже

# cat /root/master_file.sh
#!/bin/bash
if [ "$1" == "" ]; then
echo -e "Enter command number from history(syntax: source script_name.sh xxxx)"
else
source /root/source_file.sh && echo -e "Line number $1 removed successfully"

фи

мы можем проверить скрипт сейчас,

# source /root/master_file.sh
Enter command number from history(syntax: source script_name.sh xxxx)

хорошо, давайте добавим номер строки

# history | tail -n 10
 1193  grep disable /etc/sysconfig/selinux
 1194  grep enforce /etc/sysconfig/selinux
 1195  sestatus
 1196  arch
 1197  uname -r
 1198  uname -a
 1199  history
 1200  history | tail -n 10
 1201  pwd
 1202  history | tail -n 10

Давайте удалим строку 1196

# source /root/master_file.sh 1196
Line number 1196 removed successfully

 

# history | tail -n 10
 1194  grep enforce /etc/sysconfig/selinux
 1195  sestatus
 1196  uname -r
 1197  uname -a
 1198  history
 1199  history | tail -n 10
 1200  pwd
 1201  history | tail -n 10
 1202  source /root/master_file.sh 1196
 1203  history | tail -n 10

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .