Добавьте эти строки в конце вашего bash-скрипта:
MY_COMMAND="ls"
MY_PARAMS=()
read -a MY_PARAMS -p $MY_COMMAND
exec $MY_COMMAND ${MY_PARAMS[@]}
Это предполагает, что команда, которую вы хотите выполнить, является ls, измените ее так, как вам удобно. То, что вы вводите, сохраняется в виде массива MY_PARAMS, инициализированного первой строкой; Затем команда выполняется путем повторения команды с последующим расширением переменной массива, которая означает все ее элементы. Вышеуказанное не зависит от того, сколько элементов вы передаете своей команде. Команда exec shell заменяет оболочку на данную команду, эффективно завершая ваш скрипт.
РЕДАКТИРОВАТЬ:
Если вы хотите добавить в свой сценарий все возможности редактирования команд, гораздо больше того, что может предложить read -e , вы можете сделать следующее: установить rlwrap , а затем добавить следующий код внизу вашего сценария 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 - это программа, способная использовать все функции readline, в отличие от очень плохой опции Bash read -e . Он позволяет вам указать файл, где искать возможные дополнения (я использовал выше историю Bash, $ HOME/.bash_history, но вы можете написать свой собственный файл). Также он может быть настроен (см. Раздел inputrc в руководстве по readline), так что вы можете выбирать между редактированием в стиле Emacs и vi, и позволяет искать совпадения вперед (Ctrl+r) или назад (Ctrl+s) файл истории, редактирование команд и многое другое.
Я добавил опции stty -ixon/set ixon , потому что большинство эмуляторов терминала пересекают управляющие последовательности Ctrl+r и Ctrl+s и т.д., И это временно отключает эту функцию.
Кроме того , команда , которую вы хотите (я использовал Ls для иллюстративных целей) предварительно загружены, и могут быть выполнены как (ударяя возврат) или изменен с помощью возможностей чтения строки из rlwrap.
То, что вышеописанное не может сделать, - это отобразить список возможных совпадений, позволяя выбирать с помощью клавиатуры Это требует некоторого программирования на BASH (см. Ответ dirkt ).