无法迭代 archlinux 的 docker 容器中 bash 中的所有文件?

无法迭代 archlinux 的 docker 容器中 bash 中的所有文件?

我正在运行 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"

有关的:

相关内容