2016-09-28 3 views
0

bashスクリプトを使用して端末から特定の情報を表示する必要があります。 私が表示する必要がある情報は、UID、PID、PPID、STATUS、CMDです。 さて、私はすでにそれをしていましたが、アイデンティティと印刷に関する特定の問題があります。スクリプトで情報を表示する際にエラーが発生する

UID  PID  PPID  STATUS CMD 
root  1  0  Sleeping /sbin/init 

しかし、私のコードで私はこの取得:

UID  PID  PPID  STATUS CMD 
root  
1  0  (sleeping) /sbin/init 

これは実際に私のコードです。このコードで

echo "UID PID PPID STATUS    CMD" 

for i in /proc/*; do 
getent passwd `cat $i/status|grep "^Uid"`| cut -d: -f1|head -1 
cat $i/status|grep "^Pid"|awk '{printf "%-9s",$2}' 
cat $i/status|grep "^PPid"|awk '{printf "%-9s",$2}' 
cat $i/status|grep "^State"|awk '{printf"%-9s",$3}' 
cat $i/cmdline|awk '{printf "  %-25s",$1}' 
echo '\n' 
done 

を私も取得、私はそれをこのように表示する必要が 多くの "ディレクトリではない"エラー。 私はので、私が助けのトンを必要とし、この時に新たなんだ:( 注:私はpsコマンドを使用することはできません

+0

チェック '男のps' ...私は –

+0

? –

+0

@RodrigoAlejandroMuozInostroそして、なぜ、このような奇妙な要件を-ps使用することはできません制限など – sorontar

答えて

2

コマンドps(男性psを確認してください)すべて自身ですべてのことを行うことができます:

$ ps -eo user,pid,ppid,state,cmd | head -n 10 
+0

さらに1つ、コマンドラインの鉱山の応答よりも良い –

0

あなたはシェルで再生したい場合は、最初のドキュメントをお読みください。

次に任意の混乱せずに、あなたが必要なものを表示する:

ps -c -o 'uid pid ppid status ucmd' 
+0

私はpsを使うことができません –

+0

だから、ドキュメントを読んで学びます –

1

唯一の問題はheadがフルラインを出力していることですが、改行を抑制します。これを行うには、出力をキャプチャしてprintfと表示します。

以下はまた、役に立たないものの使用法を整理していますが、さらに簡略化することもできます(catおよびgrep)。

echo "UID PID PPID STATUS    CMD" 

for i in /proc/*; do 
    uid=$(getent passwd $(grep "^Uid" "$i/status") | cut -d: -f1 | head -1) 
    printf '%-9s' "$uid" # May need to adjust the formatting 
    awk '/^Pid/ {printf "%-9s",$2}' "$i/status" 
    awk '/^PPid/ {printf "%-9s",$2}' "$i/status" 
    awk '/^State/ {printf"%-9s",$3}' "$i/status" 
    awk '{printf "  %-25s\n",$1}' "$i/cmdline" 
done 
関連する問題