Bash

無法遍歷archlinux的docker容器中bash中的所有文件?

  • August 6, 2022

我正在執行一個 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的特定包名稱處,並顯示以下消息:

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上發生這種情況?幫助將不勝感激。謝謝!

腳本中的以下行將執行其中的任何內容$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"

有關的:

引用自:https://unix.stackexchange.com/questions/712637