我正在尝试复制内置函数的行为history
:特别是当您这样做时!<line # of command>
,它只是被替换为命令 at line #
。
假设我有一个包含以下内容的文件:
cd ~/some/path
我希望能够获取该文件的内容并将其推入当前终端输入行,如下所示:
$ ./put_to_input file
$ cd ~/some/path # pulled from the file, not manually typed
不确定这是否可能。帮助将不胜感激!
澄清:
我想将文件的行放入终端输入中,就像该人自己输入的一样。与使用
!n
shell 历史记录替换类似。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...