我正在尝试在 Bash 脚本中调用以下命令:
`history -a current_history`
它应该使用本次会话执行的命令来创建文件。
在 shell 环境中运行良好
在 Bash 脚本中不起作用
我看到的信息表明您必须在 bash 脚本中以不同的方式调用历史记录,格式如下:
#!/bin/bash
HISTFILE=~/.bash_history # Set the history file.
HISTTIMEFORMAT='%F %T ' # Set the hitory time format.
set -o history # Enable the history.
file="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
history >> $file # Save the history.
但是在这样做的时候将最后一行修改为history -a
。
与经常调用的文件相比,它不会返回任何结果history -a
。
答案1
如果您只想使用 打印脚本在文件中执行的命令history -a
,您可以执行以下操作:
#!/bin/bash
set -o history # Enable the history.
## Now set the HISTFILE to what you want
HISTFILE="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
history -a # write it to your file
这将导致写入以下内容/media/saleel_almajd/Study/linux/my_scripts/history.txt
:
$ cat /media/saleel_almajd/Study/linux/my_scripts/history.txt
## Now set the HISTFILE to what you want
HISTFILE="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
history -a # write it to your file
该HISTTIMEFORMAT
变量无关紧要。它仅在读取历史文件时使用,而不是在打印时使用。您仍然可以使用它来查看打印的历史记录。只需运行以下命令:
$ history -c ## clear the current history
$ HISTFILE="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
$ history -r ## read the new one
$ HISTTIMEFORMAT='%F %T ' history
1 2020-05-01 14:18:53 HISTFILE="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
2 2020-05-01 14:19:01 history -r
3 2020-05-01 14:19:01 ## Now set the HISTFILE to what you want
4 2020-05-01 14:19:01 HISTFILE="/media/saleel_almajd/Study/linux/my_scripts/history.txt"
5 2020-05-01 14:19:01 history -a # write it to your file
6 2020-05-01 14:19:03 HISTTIMEFORMAT='%F %T ' history
答案2
在脚本名称前使用.
点或source
,这样它将在当前 shell 中执行:
$ . hist.sh
$ cat hist.sh
history -a current_history
$ cat current_history
cat curhist
ls
rm cur*
ls
rm '\'
cat '\'
cd test
ls
rm current_history
vim.tiny hist.sh
. hist.sh
这会将你当前的 shell 历史记录放入current_history
你指定的文件中。
$ source --help
source: source filename [arguments]
Execute commands from a file in the current shell.
如果您想保存时间戳,可以尝试下一个脚本:
HISTTIMEFORMAT='%c '
history -a current_history
paste -sd '#\n' current_history | awk -F"#" '{d=$2 ; $2="";print NR"\t"strftime("%d/%m/%y %T",d)"\t"$0}' > formatted_history
答案3
在 bash 中,对于脚本中不起作用的项目“history -a”,我可以提供一些详细信息。
现在我正在使用 Kubuntu 22.04,但多年来我一直受到这个问题的困扰。
1.
必须获取脚本的源代码(否则将使用另一个 .bah_history 文件,而不是当前 shell 的文件)。然后“history -a”可以正常工作——但会出现以下异常:
2.
在许多这样的脚本中,通常在“history -a”之前使用这两个命令:
历史-c
历史-r
在这两者中,
历史-c
这导致“history -a”不起作用。没有任何内容被写入 .bah-history 文件。
问候
安东尼迪迪