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

変数を正しく引用して2回実行しないスクリプト全体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"

関連:

おすすめ記事