1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 |
#!/bin/bash
# Generate a list of package installations
SH_FN="/r/dnf-history.sh"
[ -f $SH_FN ] && rm -f $SH_FN
# First, determine the total number of installs performed to date
echo -n "Determining number of history entries: "
DNF_COUNT="$(dnf history list 2>/dev/null | awk '/^ *[0-9]/{print $1; exit }')"
echo $DNF_COUNT
# Now go through the entries and extract the command lines
for N in $(seq $DNF_COUNT)
do
echo -n "$N/$DNF_COUNT: "
X="$(dnf history info $N 2>/dev/null | awk '
/^Begin time/ { print "DNF_TIME=\""substr($0, 18) "\"" }
/Command Line/{
i = $4 == "-y" ? 21 : 18
op = $4 == "-y" ? $5 : $4
CMD_or_OP = (op=="install" || op=="remove") ? "CMD" : "OP"
print "DNF_" CMD_or_OP "=\"" substr($0, i) "\""
exit
}
')"
eval "$X"
# Write an entry to stdout
echo -n "$N/$DNF_COUNT ($DNF_TIME) "
[ "$DNF_CMD" ] && echo $DNF_CMD || echo "$DNF_OP"
# Write an entry to the shell file
DNF_DATE="${DNF_TIME:4:6}"
(
#[ "$DNF_DATE" != "$PREV_DATE" ] && echo "# (DNF_DATE=|$DNF_DATE| PREV_DATE=|$PREV_DATE|)"
[ "$DNF_DATE" != "$PREV_DATE" ] && echo
echo -n "# $N: $DNF_TIME"
[ "$DNF_OP" ] && echo -n " $DNF_OP"
echo
[ "$DNF_CMD" ] && echo "dnf $DNF_CMD"
) >>$SH_FN
PREV_DATE="$DNF_DATE"
unset DNF_CMD DNF_OP
done
echo "Wrote command history to $SH_FN"
|