スペースで区切られたPIDを繰り返して、開かれたファイルハンドルの数を取得します。

スペースで区切られたPIDを繰り返して、開かれたファイルハンドルの数を取得します。

スペースで区切られた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」の答えです。

編集:他のものを提案します。 2つの段階で構成されていますが。

(1) myArr=$(pidof firefox)

「1つで2つのコードを作ってください、魔術師よ、私はあなたを召喚します!」

(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 ...

おすすめ記事