2017-06-02 33 views
0

こんにちは私は、データベース内の.ctlファイルからデータをロードする小さなシェルスクリプトを作成していますが、スクリプトを実行した後に出力を表示しないでください。これが正しいかどうかを確認する:シェルでシェルスクリプトでsqlldrを実行するには

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control = /work/ctlm/SCRIPTS/upload.ctl` 
echo $Y > sqlldr_1 
rm -rf sqlldr_1 
+0

の間にスペースがあってはならない理由を直接リダイレクトしない、出力を変数に渡すためにどのような理由があります。なぜファイルに書き込んだ後にそれを削除するのですか? –

+0

スクリプト実行後にsqlldrの出力を画面に表示したくない場合、どうすればよいですか? – User123

+0

画面に2つの出力ストリームstdoutとstderrがあります。出力しない場合はリダイレクトを使います。私の答えの例 –

答えて

1

をスペースは、引数を区切る=の周りにそれらを除去するために使用されます。 また、変数$ Yを引用符で囲んで書式(スペース、改行)を保持します。

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl` 
echo "$Y" > sqlldr_1 
rm -rf sqlldr_1 

あなたは2つのファイルをout.log作成し、

をerr.logに出力

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >/dev/null 2>&1 

を削除するには、例えば、リダイレクト

を使用し、画面に何も出力したくない場合

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >out.log 2>err.log 

FD 1 >out.log1>out.logと同じで、暗黙的です個のスペースが>とファイル名、 の間に追加することができますが、ファイルディスクリプタと>

+0

ありがとう。いい説明。どちらも私のために働いた:-) – User123

+0

以下のように、control = upload.ctlを直接使用することができますか? 'sqlldr usr/passwd @ DB control = upload.ctl'または私の元の投稿に書かれているように、 ? – User123

+0

はい、おそらくあなたの現在の作業ディレクトリに応じて、試すことができます。また、投票して回答としてマークすることを忘れないでください。 –

関連する問題