Выполнить сценарий bash, чтобы каждая команда была индивидуально доступна в истории команд оболочки

Проблема с вашей командой поиска.
Чтобы разделить два имени, добавьте пробел в формате printf

find /mnt/test -name "*.txt"  -print0 -printf " %f\n"
                                               ^ ( note the space above)
1
03.04.2017, 14:02
2 ответа

Самый простой способ, который я могу придумать, это:

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
4
27.01.2020, 23:19

Вот версия, использующая диалог . Установить, если отсутствует, с помощью диалогового окна установки 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
0
27.01.2020, 23:19

Теги

Похожие вопросы