Проблема с вашей командой поиска.
Чтобы разделить два имени, добавьте пробел в формате printf
find /mnt/test -name "*.txt" -print0 -printf " %f\n"
^ ( note the space above)
Самый простой способ, который я могу придумать, это:
exec < <(cat /path/to/script; echo 'exec </dev/tty')
По сути, bash будет добавлять к истории только те данные, которые входят в стандартный ввод. Таким образом, решение состоит в том, чтобы передать скрипт в STDIN. Проблема в том, что после прочтения скрипта bash получит EOF и выйдет. Чтобы решить эту проблему, мы поместили exec </dev/tty
так, чтобы он переключал STDIN обратно на TTY после завершения чтения сценария.
К сожалению, это означает, что exec </dev/tty
будет последней вещью в вашей истории, так что вам придется ее пропустить. Если вы хотите, вы можете избавиться от этого, выполнив echo 'exec </dev/tty; history -d $((HISTCMD-1))'
. Но это начинает делать команду довольно длинной. Но если вы собираетесь добавить для этого специальную функцию оболочки, это может не иметь большого значения. Например:
function infile() {
exec < <(cat "$1"; echo 'exec </dev/tty; history -d $((HISTCMD-1))')
}
Тогда использование будет:
infile /path/to/script
Вот версия, использующая диалог
.
Установить, если отсутствует, с помощью диалогового окна установки apt-get
или диалогового окна установки yum
Выглядит примерно так:
┌────────────────────── Choose one ────────────────────────
│ Move using [UP] [DOWN], [Enter] to select │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ls Do a ls │ │
│ │ w Call w │ │
│ │ who Start who │ │
│ │ exit Exit │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────┤
│ < OK > < Quit > │
└──────────────────────────────────────────────────────────┘
Источник:
#!/usr/bin/env bash
_temp="/tmp/answer.$$"
dialog --backtitle "Blah menu" --title " Choose one "\
--cancel-label "Quit" \
--menu "Move using [UP] [DOWN], [Enter] to select" 17 60 10\
ls "Do a ls"\
w "Call w"\
who "Start who"\
exit "Exit" 2>$_temp
if [ $? -ne 0 ]; then
rm $_temp
exit $?
fi
menuitem=$(cat $_temp)
rm $_temp
clear
$menuitem