2017-12-21 12 views
0

私はBashスクリプトからrmanコマンドを実行しています。私はここに書類を使って私の命令をrmanに渡します。私は出力をキャプチャすると同時にコンソール(リアルタイム)にそれを印刷したい。 私はこの解決法を見つけましたが、私はhere-docsで動作させる方法を教えていません。ここで変数のコマンドの結果をBashに保存し、ここにあるドキュメントをコンソールに出力します

VAR=$(ls | tee /dev/tty) 

私は、現在実行している:

output=$(rman <<RMAN 
$rman_script 
RMAN 
) 

は、あなたがこのRMANの例では私もoutput変数に格納別にコンソールへstdoutの印刷ができる方法を知っていますか?どんな助けもありがとうございます。 乾杯。

+1

これはBashスクリプトには適していないようです。たぶん、いくつかの醜さは 'output = $(echo" $ rman_script "| rman)'でリファクタリングされるかもしれませんが、Bash変数への入力を収集することはすでに疑わしい匂いを導入しています問題)。 – tripleee

+0

私は選択がないと思う。私は、RMANエラーをよりうまく処理するメカニズムは見つけられませんでした。(唯一の選択は、出力と戻りコードをチェックすることです。変数にスクリプトを入れることについて悪い点がありますか?説明できますか? 'echo" $ rman_script "' – damian

+0

このボックスは適切な説明のためには小さすぎます。私はあなたの質問の行の間を少し読んでいますが、頻繁にエラーが発生するのは、シェルスクリプトの中で最も自然な方法であるパイプラインでのスケーラブルな処理 – tripleee

答えて

0
output=$(rman <<RMAN) 
$rman_script 
RMAN 

ヒアドキュメントは、あなたが<<代わりの<を持っているだけであること、構文上の入力のリダイレクトのように見えることに注意してください。入力は次の行から取得されます。

+0

これは機能しません - 'line 43:warning:here-文書は43行目で区切られていますが、 of-fil e(want 'RMAN ')' – damian

+0

'' RMAN'の後に引用文を書いたことがありますか?エラーメッセージは、RMANではなくRMANを探していることを示しています。 – user1934428

1

ここでの説明は他のリダイレクションと変わりませんが、構文はもちろん若干異なります。

var=$(rman <<\... | tee /dev/stderr 
$rman_script 
... 
) 

これはあなたのコードの代表スニペットであれば、あなたにも

var=$(rman <<<"$rman_script" | tee /dev/stderr) 

によってによってかもしれませんが、あなたが本当にスクリプトが必要な場合は、複数回(なぜ他の変数に保管してください?)多分関数にリファクタリング:

rman_script() { 
    rman <<\____HERE 
     Actual script 
     Probably multiple lines 
____HERE 
} 

var=$(rman_script | tee /dev/stderr) 

あなたは、私が代わりに/dev/stderr/dev/ttyを使用していることに気づくでしょう。あなたのスクリプトが本当に短くてシンプルでない限り、対話的に使うのは意味がありません(パスワード操作は避けるのが難しい場面のひとつです)。

関連する問題