実行後に上矢印を使用してbashスクリプトの各コマンドを選択できるようにbashスクリプトをどのように実行できますか?
スクリプト例:
#!/bin/bash
command #1
command #2
command #3
このスクリプトを実行したら、上矢印を使用して各コマンドを個別に選択できるようにします。
答え1
私が考えることができる最も簡単な方法は次のとおりです。
exec < <(cat /path/to/script; echo 'exec </dev/tty')
デフォルトでは、bashはSTDINに表示される履歴にのみ追加されます。したがって、解決策はスクリプトを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
答え2
これは中古版ですdialog
。不足している場合apt-get install dialog
またはインストールyum install dialog
次のようになります。
┌────────────────────── 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