Como posso fazer readline adicionar texto pré-digitado na inicialização do terminal?

6

Por "digitado", quero dizer que o console interativo tem texto em código esperando que o usuário (edite e execute) simplesmente pressionando enter.

Parece que algo readline deve apoiar, mas uma confirmação de que isso não é bom o suficiente. Pelo menos eu vou saber que a instalação de uma ferramenta de automação adicional (como esperar) é a única maneira.

    
por glarry 04.10.2015 / 23:07

2 respostas

3

Não tenho certeza se isso ajuda, e não é por linha de leitura, mas se o python é uma alternativa (ou algo similar), uma abordagem poderia ser a seguinte:

#!/usr/bin/env python
""" Inject command to own command line """

import sys, fcntl, termios

def main():
    """ x """
    tty = sys.stdin
    old_attr = termios.tcgetattr(tty)
    new_attr = termios.tcgetattr(tty)
    # No echo please
    new_attr[3] &= ~termios.ECHO
    termios.tcsetattr(tty, termios.TCSANOW, new_attr)

    cmd = ' '.join(sys.argv[1:])
    for char in cmd:
        fcntl.ioctl(tty, termios.TIOCSTI, char)

    termios.tcsetattr(tty, termios.TCSANOW, old_attr)

if __name__ == '__main__':
    main()

Como em:

 script_name command to inject
    
por 05.10.2015 / 01:04
1

No ZShell, o shell print -z incorporado pode conseguir isso.

% echo 'print -z "ls -l"' >> ~/.zshrc
% exec zsh
% ls -l

O ZSH não usa readline , então qualquer solução readline sem dúvida "não funcionará" ™ para ZSH.

    
por 05.10.2015 / 17:35