パート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...
}