2011-02-17 15 views
6

Escribir un script bash, y quiero obtener la entrada del usuario. Impresionante,Completar un aviso en Bash

read -p "What directory should we save in? " -e FOLDER 

Excepto que lo que me gustaría hacer, idealmente , es tener al usuario ver algo como:

What directory should we save in? /home/user/default/ 

con el cursor al final de la línea, y el capacidad de eliminar al revés o agregar o lo que sea. Básicamente, prellenando la entrada del usuario, pero dándoles la capacidad de editarlo.

Readline obviamente tiene la capacidad, pero parece que no está expuesto en el comando read. Alguna alternativa? Preferiría no tener que usar Perl o tal.

La restricción con la que estoy trabajando es que estoy escribiendo un único script de shell que sería bueno difundir ampliamente, por lo que debería confiar en la menor infraestructura existente posible. rlwrap y read -i ambos trabajan si sus dependencias (rlwrap y versión bash >> lo que yo tenga, respectivamente) están disponibles. Ambas buenas respuestas, elija lo que funcione para usted.

+0

¿qué versión de bash? ejecutar 'bash --version' –

+0

@Foo Bah - Quiero que funcione en tantas versiones de bash como sea posible. Ideal probablemente sea eventualmente para no depender de bash, pero llevarse bien con sh okay. – agnoster

+0

rlwrap es tu amigo :) –

Respuesta

0

Usted puede envolver el comando en rlwrap, que proporciona capacidades de readline instantáneos: http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap

(-P rlwrap hace lo que quiere)

En cuanto a una solución pura fiesta se preocupa por la línea 3.2 (que supongo que está utilizando), no creo que sea posible

11
$ read -p "What directory should we save in? " -i "/home/user/default/" -e FOLDER 
What directory should we save in? /home/user/default/ 

que debería funcionar, ¿verdad?

+2

leer -i no se proporciona en bash 3.2.25 (rhe5.5) o 3.2.48 (leopardo de las nieves) –

+0

Supongo que eso se agregó en algún momento entre entonces y 4.1, que es lo que tengo – vmpstr

+0

Genial, pero sí, no es compatible con la versión de Bash que tengo, y quiero esto para ser compatible (de ahí mi reticencia a usar algo como perl, aunque es probable que esté lo suficientemente extendido como para poder confiar en él). – agnoster

Cuestiones relacionadas