如何从文件内容填充终端输入行?

如何从文件内容填充终端输入行?

我正在尝试复制内置函数的行为history:特别是当您这样做时!<line # of command>,它只是被替换为命令 at line #

假设我有一个包含以下内容的文件:

cd ~/some/path

我希望能够获取该文件的内容并将其推入当前终端输入行,如下所示:

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

不确定这是否可能。帮助将不胜感激!

澄清:

我想将文件的行放入终端输入中,就像该人自己输入的一样。与使用!nshell 历史记录替换类似。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"此操作。

我能够创建一个 shell 函数来完成我需要的操作。

这里的例子:

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...

相关内容