Estou escrevendo um script simples para grep meu histórico do bash para encontrar uma string específica. Na linha de comando, posso fazer o seguinte, o que funciona bem:
history | grep git
No entanto, quando eu crio um script bash com o mesmo comando acima, de repente history
nada retorna:
#!/bin/bash
history | grep git
Quando removo a primeira linha #!/bin/bash
, meu script funciona novamente. O que esta acontecendo aqui? Como posso usar history
dentro de um script bash?
bash
shell-script
command-history
Martin Vegter
fonte
fonte
bash
usuário v3, por mera frustração, haha). Pelo menos para Martin, minha solução foi de grande ajuda, isso é (pelo menos) um consolo.Quando você executa um script do shell bash, por exemplo, executando um arquivo executável cuja linha shebang é
#!/bin/bash
, o script é executado em um shell não interativo. Um dos recursos de um shell não interativo é que o histórico está desativado. Portanto, se você quiser que seu script possa usar o histórico, precisará fazer algo assim:Obviamente, nesse caso, você poderia ter acabado de fazer:
Como as duas opções acima exigem que o arquivo de histórico (
~/.bash_history
) esteja atualizado, o que quase certamente não será.Não sei como você executa seu script após a remoção da linha shebang. Fornecer o arquivo (por exemplo, with
.
) não é o mesmo que executar o script, porque os comandos são executados no shell atual, que tem o histórico ativado.fonte
history -a
logo após o comando set para garantir que os últimos comandos sejam anexados ao arquivo primeiro?