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"
関連: