Use um histórico separado para 'read -e' (readline)

3

Eu gostaria de escrever um shell de comando interativo no shell script, para facilitar o ajuste do firewall iptables. O problema é que read -e usa o histórico shell . Existe uma maneira de usar um histórico separado para read -e em um script?

    
por BenjiWiebe 01.02.2014 / 02:16

1 resposta

2

Se você tem rlwrap (debian package rlwrap ), então você pode usar algo como:

LINE=$(rlwrap head -n1)

que usará o arquivo ~/.head_history por padrão. ( man rlwrap para mais detalhes, incluindo opções para especificar um nome de arquivo histórico.)

Outra possibilidade é executar read em um subshell com HISTFILE definido para seu próprio arquivo de histórico, mas você precisará fazer muito mais trabalho porque, embora read -e use , história, não atualiza. Então você provavelmente precisará de algo como:

LINE=$(bash -c 'HISTFILE=/path/to/history_file;
                history -r; read -e LINE;
                history -s "$LINE"; history -w;
                echo "$LINE"')
    
por 02.02.2014 / 05:54