コマンド出力の最初の行を読み込みます。このコマンドは私をリモート端末に接続します

コマンド出力の最初の行を読み込みます。このコマンドは私をリモート端末に接続します

パート1

my_command複数行を出力するコマンドがあるとしましょう。

my_commandスクリプトの準備ができたらすぐにmy_command実行を維持しながら、出力の最初の行をキャプチャしたいと思います。

私は次のことがうまくいくと思います。

# Get a code that `my_command` prints in its first line
parsed_first_line=`my_command | grep -oEe '[0-9]+'` 
echo 'Here is the first line ' $parsed_first_line

しかしそれは真実ではない。 echoステートメントは完全に完了した後にのみ到着しますがmy_command、これは私が望むものではありません。

パート2

詳細:Imagineはmy_command実際に私のシェルをリモートシェルに接続するコマンドです。これにより、私たちのソリューションはどのように変更されますか?パート1

詳細が重要な場合は、my_command実際には1行のコマンドです。

bsub /bin/zsh

これはPlatform LSFログインしたシステム(この場合は対話型zshシェル)からリモートグリッドにジョブを送信するコマンド。送信されたジョブがグリッドにスロットを確保すると、LSFはそれを予約してリモートシステムに対話型シェルを提供します。

1つ目は、私のタスクをリモートキュー(スクリプトで解析したいもの)に出力することbsubです。その後、スロットが開いたら、私の仕事をスケジュールします。job ID

簡単な解決方法があるかどうか知りたいです パート1なるだろうパート2

ベストアンサー1

通常、read一度に1行ずつ入力を受け取ります。次のことができます。

my_command | { 
  read line
  line=$(grep -oEe '[0-9]+');
  if [ $line ]; then
    echo 'Here is the first line ' $line
  fi
  #possibly read more from my_command, transfer control to another program via `exec`, etc...
 }

おすすめ記事