来自 b 脚本的 History -a

来自 b 脚本的 History -a

我正在尝试在 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 文件。

问候

安东尼迪迪

相关内容