次のコマンドを実行するために出力を読み取ることはできません。

次のコマンドを実行するために出力を読み取ることはできません。

このスクリプトが実行されると、PIDを取得します。次に、出力「PID」を読み、次のコマンドを次のように実行したいと思います。

ps -ef | grep -i PID  
ps -ef | grep -i PID  

while read -r -u10 server port line  
do  
  echo ==========  server: "$server" port: "$port"  ==========  
  ssh -qn "$server" "netstat -tulpunt | grep -E ":$port "" | \
      awk '{print $7}' | grep '/' | awk -F "/" '{print $1}'  
  echo  
done 10< demo

答え1

  • 私が理解しているのは、コードの2番目の部分がPIDを提供し、それを見つけるためにgrepが欲しいということです。
  • そしてdouble psもタイプミスです。

それはまるで

while read -r -u10 server port line
do
  echo ==========  server: "$server" port: "$port"  ==========
  pid=$(ssh -qn "$server" "netstat -tulpunt | grep -E ":$port "" | \
      awk '{print $7}' | grep '/' | awk -F "/" '{print $1}'  )
  echo "PID: $pid"
  ssh -qn "$server" "ps -ef | grep $pid"
  echo
done 10< demo

ノート

  • | grep -v grepgrepはgrep自体を行います(最後に追加することをお勧めします)。
  • $( ... )行を延長する構文がわかりません。

編集する:

この場合は、以下を試してください。

ssh -qn "$server" "netstat -tulpunt | awk '/:"$port"/ { split(\$7,A,\"/\" ) ; printf \"ps -p %d\n\",A[1]}' | bash "

これは非常に直感的です。

  • awkのgrep機能は/:"$port"/ポートを占有します。
  • 分割すると、A[1]でPIDを選択します。
  • ps -p %d -f --no-headers最後にシミュレーションに使用します。ps -ef | grep PID
  • 私たちはそれをリモコンに与えました。bash

関連情報