“posição do histórico fora do intervalo” ao chamar o histórico do script bash

0

Eu quero fazer um script simples para excluir uma linha de bash_history , com base na entrada do usuário do número da linha.

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

O erro é "posição do histórico fora do intervalo" (o que não deveria ser, estou usando um número dentro do intervalo).

Por que isso não funciona?

    
por Adam 24.09.2013 / 23:53

2 respostas

5

Existem dois motivos pelos quais o seu script não funcionará como pretendido:

  1. O ambiente bash de um script em execução é "não interativo" e não possui os recursos de histórico ativados.
  2. O ambiente bash de um script em execução é independente do ambiente em que você está trabalhando de forma interativa.

Dependendo do seu caso de uso, a solução mais fácil pode ser originar o script, em vez de executá-lo. Veja o post do SU explicando a diferença de fornecimento e execução para mais informações.

    
por 25.09.2013 / 00:55
0

Por meio do método de origem, está funcionando

meu arquivo_de_origem.sh contém

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

e meu master_file.sh tem linhas abaixo

# 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"

fi

podemos testar o script agora,

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

ok, vamos adicionar o número da linha

# 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

Vamos remover a linha 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
    
por 05.01.2016 / 08:06