오늘은 게을러서 이 작업을 수행할 수 있는 간단한 솔루션을 찾고 있습니다. 공백을 포함하여 여러 줄을 입력하세요. 명령을 실행할 때 해당 행을 따옴표로 묶어야 합니다. 나는 이것이 여기에서 여러 번 요청되었다고 확신하므로 해결책의 방향을 알려주십시오.
예:
Aaa aaa
Bbb bbb
Ccc ccc
실행해야 합니다 command "Aaa aaa" "Bbb bbb" "Ccc ccc"
.
문제에 관한 내용은 다음과 같습니다."dnf 업데이트" 중에 "dnf groupupdate" 패키지가 표시되지 않는 이유는 무엇입니까?
나는 다음을 제공했습니다:
# the first line is informational and redundant, thus tail
# each group is in a separate line
dnf -q group list --installed | tail -n +2 | while read group; do dnf group upgrade "$group"; done
하지만 각 그룹별로 개별적으로 실행되므로 dnf upgrade
모든 그룹을 한 번에 업그레이드하는 것보다 시간이 더 걸립니다.
답변1
따옴표는 C, Perl 또는 sh와 같은 일부 프로그래밍 언어의 구문의 일부입니다.
이 줄 주위에 따옴표를 붙이고 싶지 않고, 일부 프로그래밍 언어의 구문(예: sh / perl에는 나중에 설명할 참조 연산자가 포함되어 있습니다.
xargs
목적 은 다음과 같습니다 .
xargs -rd '\n' -a file.list some-command --
-r
, -d
, 및 는 -a
GNU 확장입니다.
xargs
some-command
한 번에 전달할 수 있는 인수 수에 대한 제한을 해결하기 위해 여러 번 실행될 수 있습니다 .
답변2
이것은 추악하지만 Bash에서는 작동합니다.
groups=()
while read -r group; do groups+=$group; done < \
<(sudo dnf -C -q group list --installed | tail -n +2)
sudo dnf group upgrade "${groups[@]}"
답변3
내가 선택할 수도 있겠네요스테판 샤젤라스의 변주곡GNU가 있었다면 xargs
. 그러나 내 메인 시스템에는 GNU가 없기 때문에 xargs
다음 줄을 입력하기 전에 다음 줄을 인용해야 합니다 xargs
.
$ sed -e 's/^/"/' -e 's/$/"/' file | xargs printf '<%s>\n'
<Aaa aaa>
<Bbb bbb>
<Ccc ccc>
이는 입력에 다른 큰따옴표가 없다고 가정합니다. 사용자에 따라 xargs
입력이 비어 있는지 여부에 관계없이 유틸리티를 한 번 이상 실행할 수도 있습니다 xargs
(참조xargs에 입력이 제공되지 않으면 xargs가 유틸리티를 실행하지 않도록 합니다.).