我正在运行 bash 脚本:
#!/bin/bash
touch archlinux_log.txt
touch packages_not_in_archlinux.txt
while read line; do
if pacman -Q --info $line ; then
pacman -Q --info $line >> archlinux_log.txt
else
echo "No Package info for $line"
$line >> packages_not_in_archlinux.txt
fi
done<"$1"
然而,我在这里面临的一个非常特殊的问题是脚本总是停在一个名为迪姆恩格并显示以下消息:
dirmngr[10701.0]: permanently loaded certificates: 141
dirmngr[10701.0]: runtime cached certificates: 0
dirmngr[10701.0]: trusted certificates: 141 (141,0,0,0)
我在 Debian 和 Fedora 中运行了相同的脚本,没有遇到任何问题。所有包裹都经过扫描。有什么提示说明为什么 archlinux 会发生这种情况吗?我们将非常感谢您的帮助。谢谢!
答案1
脚本中的以下行将执行中的所有内容$line
并将输出附加到packages_not_in_archlinux.txt
:
$line >> packages_not_in_archlinux.txt
如果$line
扩展为dirmngr
,则这就是脚本中该点将运行的命令。
您可能希望将字符串存储$line
在输出文件中:
printf '%s\n' "$line" >>packages_not_in_archlinux.txt
整个脚本,正确引用变量并避免运行pacman
两次:
#!/bin/sh
tmpfile=$(mktemp)
while IFS= read -r package; do
if pacman -Q --info "$package" >"$tmpfile"
then
cat "$tmpfile" >>archlinux_log.txt
else
printf 'No package info for %s\n' "$package"
printf '%s\n' "$package" >>packages_not_in_archlinux.txt
fi
done <"$1"
rm -f "$tmpfile"
有关的: