2017-05-30 10 views
0

shellでunix用に作成したスクリプトを変更しようとしています。このスクリプトは、人間とのやりとりをしなくても、バックアップされたサーバー上で実行されますが、ユーザーが情報を入力できるように別のスクリプトを作成する必要がありました。だから、それはユーザー入力のために古いバージョンに変更するだけです。しかし、私が実行している最大の問題は、エラーログとエコーの両方をログファイルに保存することです。スクリプトにはたくさんのものがありますが、端末に表示されているものをログファイルに送信して、後で調べるようにしたかったのです。私が持っているもの端末ログとファイルログの両方にエコーとエラーを送信する

はこれです:

exec 1> ${LOG} 2>&1 

このラインはかなりのログファイルにすべてを送っています。それだけでいいですが、スクリプトに情報を入力しようとする人もいますし、プロンプトに必要なエコーを含めてすべてをログファイルに送ります。この行はスクリプトの冒頭にもありますが、stderrとstdoutのメッセージを詳しく読んでいます。私が試した:

exec 2>&1 1>>${LOG} 
exec 1 | tee ${LOG} But only getting error when running it this "./bash_pam.sh: line 39: exec: 1: not found" 

私は問題を解決するために、サイトsuch as thisの上に行ってきましたが、それは両方に印刷されない理由を私は理解していないのです。私はそれを挿入する方法、それは、ログの場所にだけではなく、端末に送信するか、またはそれを端末に送信しますが、ログには何も辛抱強くありません。

EDIT:解決策の中には、bashでは動作するが、/ bin/shでは動作しないものがあります。

+0

私が正しく理解しているのは、stdoutにエラーが表示され、ファイルに記録されているだけですみます。 –

+0

さて、エコーがターミナルに来ることを望みましたが、同時に、エコーとエラーがログの場所に送られたかったのです。 –

+0

"echos"とはエラー出力がないということですが、それは不明です。 –

答えて

0

も、あなたのスクリプトでこのコマンドを実行しますlogfile.txtに印刷されているときは、コンソール上に印刷されるすべての出力をご希望の場合:

bash your_script.sh 2>&1 | tee -a logfile.txt 

またはファイルの中でそれを呼び出す:

<bash_command> 2>&1 | tee -a logfile.txt 

上書きする代わりにlogfile.txtに追加する場合は、-aオプションをteeに追加します。

+3

これは、 'logfile.txt'を端末に印刷された新しい行ごとに上書きします。ログファイルに新しい行を追加するには 'tee -a'が必要です。 –

+0

@GeorgeVasiliou OPが追加したいかどうかわかりませんが、メモとして追加します – TheGirrafish

関連する問題