我有以下Bash脚本
set -o histexpand
set -o history
pwd
lc="!!"
当我在交互式外壳中运行它时,它会打印
/home/user
lc="pwd"
我希望lc=pwd
通过使用历史记录扩展,而不是获取,来获取交互式外壳程序中使用的最后一个命令。所以,如果我跑步echo foo; ./script
,我希望得到
/home/user
lc="echo foo"
我试图set -H
在脚本中运行,但它不起作用。
除非调用外壳程序将其历史记录保存到$HISTFILE
每个执行的命令之后bash
(默认情况下不执行)并导出HISTFILE
变量,否则使用外壳程序的历史记录扩展来获取在运行脚本之前在外壳程序会话中执行的命令是不可行的。不需要做。
默认情况下,bash
Shell为当前交互式Shell会话维护一个内存历史记录。此历史记录保存到$HISTFILE
外壳程序会话退出时。当启用命令行历史记录的新会话开始时,将从该文件中读取已保存的历史记录(假设新的Shell使用相同的$HISTFILE
值)。
除非脚本具有HISTFILE
从其调用环境继承的变量,否则您的脚本最多将能够访问其自身会话的命令行历史记录,即脚本中的命令。如果HISTFILE
已导出,但是如果调用外壳程序$HISTFILE
在运行脚本之前从未将其历史记录保存到该外壳程序,则不可能获取该父外壳程序会话的内存历史记录,并且您最多将能够访问该脚本程序的历史记录。会议已经死了很久了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句