공백으로 구분된 PID 집합을 반복하는 방법은 무엇입니까? 첫 번째 단계는 각 요소를 자체 행으로 만드는 것이었던 것으로 기억합니다.
내 Firefox 세션에는 꽤 많은 PID가 있습니다.
$ pidof firefox
315534 315333 315196 315007 314885 314550 314493 311685 310664 307575 306443 297316 284759 284396 279546 274917 274885 274850 274729 274669 274666 271203 241078 235645 229985 156754 156565 152252 151123 149938 149548 149491 147870 137040 136986 135960 134823 113097 109238 106897 106790 106729 106488 106482 106478 106447 106414 106367 106335 106304 106261 106192 106114 93683 61965 58700 58596 54029 53959 53609 52555 52272 52268 52265 48999 48840 47771 47330 44585 31973 31240 15503 15420 15415 15413 15216 15205 15201 15074 15037 15013 14981 14942 14688 11875 11837 11804 11769 11735 11725 11686 10724 10660 10617 10213 9110 9073 9022 8888 8856 8789 8755 8692 8626 8279 8245 8212 8173 6605 6589 6555 6491 6468 6431 6421 6355 6329 6319 6188 6135 6100 5912 5896 5880 5874 5868 5857 5850 5844 5841 5839 5679 5629 5058
어쩌면 배열에 넣는 것이 더 나을까요?
궁극적으로 열린 파일 핸들 수를 얻고 싶습니다.
지금까지 게시된 모든 솔루션은 작동하므로확인하다하나는 "the" 답변입니다.
편집: 다른 것을 제안하겠습니다. 두 단계로 구성되어 있지만.
(1) myArr=$(pidof firefox)
"하나로 두 개의 코드를 만들어라, 마술사여, 내가 당신을 소환합니다!"
(2) for i in "${myArr[@]}"; do echo "${i}"; done
myArr=( $(pidof firefox) )
그런데 왜 (1) 도 똑같이 쓸 수 있는지 설명할 수 있는 사람이 있나요 ? 왜 (2)에서도 똑같이 쓸 수 있나요 for i in "${myArr[@]}"; do echo "$i"; done
?
답변해주셔서 감사합니다! 당신은 훌륭합니다!
답변1
@HackSaw에 적합한 답변이 있습니다.
일반적으로 떠나는 것은 위험하다어느따옴표가 없는 변수 또는 명령 대체(참조:bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험)
완전히 안전하려면 이렇게 하세요
while read -ra words; do
# do stuff with the `words` array
printf "> %s\n" "${words[@]}"
done < <(
some_external_command
)
반복 while read
읽기철사외부 명령을 실행하고 read -a
각 줄을 단어로 나눕니다.
< <(...)
다음에서 리디렉션됩니다.프로세스 교체. 이것은 방지합니다서브쉘 문제그리고
some_external_program | while read ...
답변2
for i in `pidof firefox`; do echo "${i}"; done
그러나 @doneal24가 지적했듯이 $(...)를 사용하는 것이 더 좋습니다.
for i in $(pidof firefox); do echo "${i}"; done
아니면 일반적으로
for i in list of things separated by blanks; do echo "${i}"; done