Como posso acessar o buffer de histórico em sh? (não no Bash)

2

Existe um histórico de comandos em sh , por exemplo, como acessá-lo e também como garantir que está claro?

Para esclarecer shells aqui: digamos que você tenha se logado em um sistema Linux não-Gui, e $ SHELL não está definido como Bash, mas em Dash ou qualquer shell parecido com Bourne pode ser.

As páginas man se referiam a um comando "history", que eu vi em alguns sistemas BSD, mas isso não estava na minha shell, e eu não encontrei facilmente a resposta nas páginas subsequentes de sh man e info.

O comentário do decriptor em este post me fez pensar que talvez seja mais necessário aprender sobre a chave ligações em sh em vez de algo como as diferenças entre os shells.

Para futuros leitores, aqui está uma ótimo post sobre a história da shell .

    
por forgotstackxpassword 23.03.2016 / 01:31

3 respostas

2

a menos que seja explicitamente definido, não há histórico de shell padrão. para verificar se você tem ou não, o comando env|grep -i hist pode ser executado e se você ver variáveis como histfile etc. (pode estar em maiúscula) significa que seu histórico de shell está habilitado, e você deve ver onde o arquivo de histórico está localizado. Para limpar, você pode fazer qualquer método decente, além de excluir o arquivo

    
por 23.03.2016 / 02:23
2

Nem todos os shells suportam o histórico. dash tem suporte de histórico limitado por meio do comando fc se compilado com o suporte a libedit, mas não o suporta de outra forma. dash não é capaz de salvar um arquivo de histórico.

Geralmente, se um shell não suporta a tecla de seta para cima, você pode assumir que ele não salvará um arquivo histórico. Esta não é uma regra dura e rápida, mas é verdade em todos os casos que me deparei.

Alguns outros shells ( bash notavelmente, mas outros também) usam readline, que geralmente salva o histórico em seu diretório home como um arquivo ~/.*_history , com * sendo substituído pelo nome do programa. O Python 3 usa readline por exemplo e armazena seu histórico em ~/.python_history .

Dependendo do shell, o local de salvamento pode ou não ser configurável. bash e zsh usam a variável HISTFILE (all caps). Se o seu shell está configurado corretamente, este não deve ser uma variável de ambiente, portanto, se você o vir em env , cometeu um erro (mas ainda deve aparecer na saída de set ou printf %s\n "$HISTFILE" ).

Se um programa não oferecer suporte ao histórico (por exemplo, ed , scripts de shell usando read ou versões anteriores de mysql ), há um aplicativo de plataforma cruzada chamado rlwrap que usará o readline para dar a conclusão de tabulação tipo bash, manipulação de chave de seta e histórico.

    
por 29.07.2016 / 15:35
0

É feio, mas eu uso isso em sistemas antigos com apenas sh disponíveis como hosts ESXi:

cat 'printf %s $HISTFILE'
    
por 07.03.2018 / 20:36