ファイルの内容から端末入力行を埋める方法は?

ファイルの内容から端末入力行を埋める方法は?

組み込み関数の動作を複製しようとしていますhistory。特にこれを行うと、!<line # of command>のコマンドに置き換えられますline #

次の内容を含むファイルがあるとします。

cd ~/some/path

そのファイルの内容を取得して、次のように現在の端末入力行にプッシュできるようにしたいと思います。

$ ./put_to_input file
$ cd ~/some/path # pulled from the file, not manually typed 

これが可能かどうかはわかりません。どうぞよろしくお願いします!

言う:

人が直接入力したように、ファイルの行を端末入力に入れたいと思います。!nシェル履歴の置き換えを使用するのと似ています。https://opensource.com/article/18/6/history-command

答え1

調査.:

$ cat input
cd /etc
pwd

$ . input
/etc

答え2

@DopeGhotiのソリューションを使用できますが、~/historyファイルに追加して呼び出して編集できます。

cat input >> ~/history
^r <cmd>
^e

答え3

でこれをzsh行うことができますprint -z "content"

必要なタスクを実行するシェル関数を作成できました。

ここの例:

put_to_input() {
    # Push command to current terminal input line with print -z
    print -z $(cat $HOME/runfile)
}
$ cat $HOME/runfile
echo hehe
$ put_to_input
$ echo hehe # file contents appear on input line

オリジナルソース: Bashは独自の入力ストリームに書き込むことができますか?

答え4

Bashでは、すべてのファイルの内容を履歴に追加できます。

history -r file

その後、上矢印(Ctrl-pと同じ)を押してコマンドを編集して実行するか、を使用して直接実行できます!

例:

$ echo '~bin/start.sh my=complicated -command=that must be "edited" all the time' > file
$ history -r file
$ history
    1  echo '~/bin/start.sh my=complicated -command=that must be "edited" all the time' > file
    2  history -r file
    3  ~/bin/start.sh my=complicated -command=that must be "edited" all the time
    4  history
$ !3
Running...

関連情報