A seta para cima e .bash_history possuem comandos diferentes, então, onde a seta para cima obtém seus dados?

4

Parece que descobri que o arquivo ~/.bash_history não contém o que é exibido quando você usa a seta para cima. Eu encontrei isso fazendo um comando assim

smbclient -L 10.2.10.240 -umyuser -p"mypassword on the command line is bad" 

Este comando está realmente errado, tem um erro, o -u é, na verdade, deveria ser um -U e, portanto, este comando falhou.

No entanto, eu também percebi que isso era ruim de fazer, porque ele colocava sua senha no histórico, eu entrei em .bash_history e o que foi interessante foi que não houve erro. Só tem

smbclient -L 10.2.10.240 

e é isso. Mas é assim que fica estranho, se você usar a seta para cima, todo o comando incluindo erros está lá para você editar.

Então a questão é: por que existe uma diferença entre o que está em .bash_history e o que a seta para cima exibe? Onde estão os dados da seta para cima?

Antes de você apontar; é bastante conveniente neste caso porque impede que minha senha seja salva, mas, não é por isso que está fazendo isso, eu também testei com opções corretas e então faz salvar o comando inteiro, incluindo senhas e todos .

    
por cellarweasel 13.12.2013 / 21:27

3 respostas

6

O arquivo ~/.bash_history só é atualizado quando você fecha / sai do terminal. Enquanto estiver no terminal, você pode navegar para trás nos comandos que foram inseridos nessa sessão. Então, se você sair dessa sessão de terminal, seu histórico será atualizado com o comando ausente.

Além disso, se você colocar um espaço no início de uma linha, antes do comando, esse comando não será salvo no histórico. Essa é uma boa prática se você emitir um comando que não deseja incluir no histórico.

    
por falconer 13.12.2013 / 21:35
1

Sua pergunta é respondida, mas, além disso, se você quiser inserir os dados em tempo real no histórico, insira: history

entrando! diretamente seguido pelo número do histórico re-executado o comando, nas páginas man você encontrará algumas boas maneiras de alterar seu comando antes de executar.

    
por Requist 13.12.2013 / 23:08
0

As principais diferenças entre o conteúdo do arquivo de histórico (que normalmente é ~/.bash_history ) e o histórico atual (que é acessível com as setas para cima e para baixo e o comando history ) são:

  • Como outros já mencionaram, o histórico do shell atual não é geralmente gravado no arquivo de histórico até que o shell saia.
  • De igual importância, o histórico do shell atual não é normalmente lido no arquivo de histórico exceto quando o shell é iniciado.

Para colocar de outra forma:

  • Os comandos no shell atual não são gravados no arquivo de histórico até que o shell seja encerrado (isto é, ele é gravado na saída).
  • Os comandos adicionados ao arquivo de histórico (por exemplo, por outra instância de shell em execução simultaneamente) após o shell atual ter começado a ser executado não são acessados pelas setas para cima e para baixo, nem digitando history e pressionando Enter .

No entanto, o comando history , que é um shell embutido, tem opções que alteram esse comportamento. Você pode dizer explicitamente ao shell para ler ou gravar no arquivo de histórico. Especificamente, você pode:

  • grave as entradas desta shell no arquivo de histórico após as existentes ( -a ) ou em vez delas ( -w )
  • leia o arquivo de histórico e adicione entradas não lidas ( -n ) ou todas entradas ( -r ) ao histórico deste shell
  • limpe completamente o histórico desse shell ( -c ) ou apenas remova uma única entrada ( -d offset )

Para mais informações:

por Eliah Kagan 25.07.2017 / 18:33

Tags