0

このコマンドが改行なしで PID のリストを出力しない理由を誰かが説明できますか? 次のような出力が必要です。

1234 5678 123 456

これらすべてを試しましたが、どれも機能しません

ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%d ", $1 }'
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ printf "%s ", $1 }'
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr '\n' ''
ps -eww --no-headers -o pid,args | grep 'usr' | awk '{ print $1 }' | tr -d '\n'

bash は正常に動作することがわかりましたが、私の場合は zsh ではありません

4

2 に答える 2

2

zsh最後の出力行が部分的であった (つまり、最後の改行がない) ことをユーザーに知らせる機能があります。詳細についてはPROMPT_CRPROMPT_SPおよびPROMPT_EOL_MARKを参照してくださいman zshoptions

に追加PROMPT_EOL_MARK=''して~/.zshrc部分的な行インジケーターを空にすることもできますが、これはお勧めしません。これは単なる機能であることがわかり、有効のままにしておくとデータに問題があることに気付くことがあります。かなり強力な端末では、パーセント記号 (PROMPT_EOL_MARKが設定されていない場合のデフォルト) は太字で反転して出力されるため、実際の出力と混同することはありません。

コマンドの出力は、希望どおりの pid のリストです。最後の改行を追加すると、次の場合でも正しく表示zshされます。

ps -eww --no-headers -o pid,args | awk '/usr/ { printf "%d ", $1 } END {print""}'

grep(の力を使用して取り除くという別の答えのアイデアも使用してawkください)。

于 2013-02-13T22:08:48.980 に答える
1

私にとっては次のようになります:

ps -eww --no-headers -o pid,args | awk '/usr/{printf "%d ",$1}'

つまりawk、正規表現に一致する文字列を検索できるのでgrepawk.

于 2013-02-13T22:00:31.830 に答える