Em uma frase: não funciona porque você não está chamando corretamente.
Primeiro, como seu script não começa com #!/bin/bash
, ele não é realmente um script bash. Qual shell é executado depende de como você o invoca. Quando você invoca-lo a partir da linha de comando bash, bash garfos uma nova instância de si mesmo (isso tem que acontecer com execute qualquer comando externo), e é essa nova instância que executa o script. Portanto, o script é executado com as mesmas configurações (incluindo o histórico até agora) que o shell pai. Ele é executado com diferentes opções ; em particular, o rastreamento de histórico está desativado para os comandos no script (o que mais lhe convém, já que, caso contrário, ele seria adicionado ao histórico que você deseja modificar).
Se a instância do bash que está executando o script tem a variável HISTFILE
set depende se foi exportado no pai (o que é um pouco estranho). Se não for exportado e, portanto, definido no filho, o script filho não salvará o histórico modificado quando terminar.
Se HISTFILE
for exportado, o script filho modificará seu arquivo de histórico. No entanto, a menos que você tenha configurado seu shell interativo para recarrega o histórico após cada comando , o histórico modificado só será escolhido por instâncias recém-iniciadas do bash.
Se você deseja executar um fragmento de shell que afeta a instância atual do shell, você deve executar esse shell na instância atual do shell, em vez de executá-lo como um subprocesso . Você teria um problema semelhante se quisesse fazer outras coisas que afetassem o próprio processo de shell, como alterar diretórios, definir variáveis, etc. Use o .
(“ponto”) ou source
embutido para executar um script no processo de shell atual.
. idelhistory 300 365
Como alternativa, você pode definir isso como uma função em .bashrc
.