Texto de eco como sugestão de aviso no bash

4

É possível alterar o texto exibido após $PS1 . É o que o usuário insere. Eu quero sugerir algum comando daqui em diante my_function é executado. Claro que eu deveria ser capaz de modificar / apagar usando a tecla backspace

root@linux: 
root@linux: ls
aplha beta gamma
root@linux: my_function
root@linux: echo_something_here (It should be deletable by me)
    
por VarunAgw 02.02.2016 / 18:10

2 respostas

3

Baseado em esta resposta você pode usar expect (pode ser necessário instalá-lo primeiro):

#!/usr/bin/expect -f

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt (in my case was '$', but your example only put ':')
expect ": "

# store the first argument in a variable
set arg1 [lindex $argv 0]

# Type something
send $arg1

# Hand over control to the user
interact

exit

Agora você pode chamá-lo (supondo que você o salvou como my_function ):

root@linux: ./my_function "some text here"
root@linux: some text here

O único efeito indesejável pode ser o início de um novo bash.

    
por 02.02.2016 / 18:33
2

Se eu entendi a pergunta corretamente, então tenho um script de suporte

 #!/bin/bash
 read -ei "$*"
 printf "%s\n" "$REPLY"

chamado por exemplo ~ / bin / iedit, então você pode dizer

eval $( ~/bin/iedit "some text here" )

isto produzirá "algum texto aqui", que você pode editar. Quando terminar de editá-lo, o comando resultante será executado.

Este não é um bom exemplo de código. Quase sempre você quer usar "$ @" em vez de "$ *", e geralmente deve-se tentar evitar o uso de eval. Você pode querer adicionar um histórico -s $ REPLY também. Colocando estes juntos, o script de suporte pode ser

 #!/bin/bash
 read -ei "$*"
 history -s "$REPLY"
 fc -s

e você invocaria como 'source ~ / bin / iedit' algum texto aqui "'.

    
por 11.10.2016 / 07:47