Ajoutez ces lignes à la fin de votre script bash :
MY_COMMAND="ls"
MY_PARAMS=()
read -a MY_PARAMS -p $MY_COMMAND
exec $MY_COMMAND ${MY_PARAMS[@]}
Cela suppose que la commande que vous voulez exécuter est ls vous pouvez le modifier à votre guise. Ce que vous entrez est stocké dans un tableau appelé MY_PARAMS La commande est ensuite exécutée en répétant la commande suivie de l'expansion de la variable tableau, c'est-à-dire de tous ses éléments. Ce qui précède est indépendant du nombre d'éléments que vous passez à votre commande. La commande exec Shell remplace le Shell par la commande donnée, mettant effectivement fin à votre Shell.
EDITAR :
Si vous souhaitez ajouter des capacités complètes d'édition de commandes à votre script, bien au-delà de ce que la lire -e vous pouvez procéder de la manière suivante : installez rlwrap puis ajoutez le code suivant au bas de votre script Bash :
stty -ixon
MYINPUT=()
HISTORY=$HOME/.bash_history
MYCOMMAND="ls"
MYINPUT=$(rlwrap -H $HISTORY -P $MYCOMMAND sh -c 'read REPLY && echo $REPLY')
stty ixon
exec sh -c "${MYINPUT[@]}"
rlwrap est un programme qui est capable d'utiliser toutes les fonctionnalités de ligne de lecture contrairement aux très pauvres Bash lire -e option. Elle vous permet de spécifier un fichier où chercher les complétions possibles (j'ai utilisé l'historique Bash, $HOME/.bash_history ci-dessus, mais vous pouvez écrire votre propre fichier). Il peut également être configuré (voir le inputrc section dans le manuel readline ) afin que vous puissiez choisir entre Emacs -style et vi -et vous permet de rechercher des correspondances en avant ( Ctrl + r ) ou en arrière ( Ctrl + s ) dans le fichier d'historique, modifier les commandes, et bien plus encore.
J'ai ajouté le stty -ixon/set ixon car la plupart des émulateurs de terminaux interceptent les séquences de contrôle. Ctrl + r y Ctrl + s et ainsi de suite, ce qui désactive cette fonctionnalité pour le moment.
Aussi, la commande que vous souhaitez (j'ai utilisé ls à titre d'exemple) est préchargé et peut être exécuté. en l'état (en appuyant sur la touche retour) ou modifié via la fonction ligne de lecture capacités de rlwrap .
Ce qui précède ne peut pas consiste à afficher une liste de correspondances possibles, ce qui vous permet de faire votre choix à l'aide de votre clavier. Cela nécessite un peu de programmation BASH (voir dirkt Réponse de l'UE).