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"

관련된:

관련 정보