シェルのコマンド履歴から各コマンドに個別にアクセスできるようにbashスクリプトを実行します。

シェルのコマンド履歴から各コマンドに個別にアクセスできるようにbashスクリプトを実行します。

実行後に上矢印を使用して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

おすすめ記事