組み込み関数の動作を複製しようとしています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...