コマンドラインとスクリプトで実行すると、ps出力が異なります。

コマンドラインとスクリプトで実行すると、ps出力が異なります。

実行中のプロセスのPIDのリストを作成する必要があります。

これはスクリプトです。

ps
echo "fields are "
ps | cut -d' ' -f1

ps展示

  PID TTY          TIME CMD
 2168 pts/4    00:00:00 sh
 2177 pts/4    00:00:00 mailx
 5191 pts/4    00:00:00 sh
 6494 pts/4    00:00:00 sh
 6495 pts/4    00:00:00 ps
12154 pts/4    00:00:00 sh
12172 pts/4    00:00:00 mailx
15618 pts/4    00:00:00 bash

しかし、パイプを切る結果はただ

12154
12172
15618

答え1

問題は、cut単一のスペース文字を区切り文字として使用することですが、列名と4桁のPIDが右揃えであるため、先頭のスペースが複数あり、空白行がcut出力されます。

awk別の方法は、これらの入力をよりよく処理することを使用することです。

ps | awk '{ print $1 }'

ps特別な状況でマインドモンキーの答えより良い方法です。

答え2

完全なリスト:

ps -eo pid

またはあなたのプロセスのみ:

ps -o pid

答え3

3番目のオプションとして、以下を使用することもできますgrep

ps | grep -oP '^\s*\d+'

-PPerl正規表現(\s\dおよび+)を有効にして、一致する行のうち一致する部分のみを印刷するように-oします。grep

関連情報