2009-12-04 8 views
7

からstdoutとstderrをリダイレクトする方法次のスクリプトは、cshスクリプト

install.csh:

 
#!/bin/csh -f 
tar -zxf Python-3.1.1.tgz 
cd Python-3.1.1 
./configure 
make 
make install 
cd .. 
rm -rf Python-3.1.1 

使用目的:私は、スクリプトを変更するにはどうすればよい

./install.csh |& tee install.log 

私はまだリダイレクトを行うようにユーザに要求せずにinstall.logとコンソールの出力を取得していますか?

答えて

7

いくつかのシンプルなソリューション:

解決方法1: ティーあなたは

#!/bin/csh -f  
tar -zxf Python-3.1.1.tgz |& tee -a install.log 
cd Python-3.1.1 |& tee -a install.log 
./configure |& tee -a install.log 
make |& tee -a install.log 
make install |& tee -a install.log 
cd .. |& tee -a install.log 
rm -rf Python-3.1.1 |& tee -a install.log 

ソリューション2を追加するティーの-aスイッチを利用して、独立してログインしたいすべての行: 2番目のスクリプトを追加します。例えば は、 は、新しいinstall.cshスクリプトを追加し、install_commandsに現在install.cshの名前を変更:

#!/bin/csh -f 
/bin/csh install_commands |& tee install.log 
+0

ありがとう。私は、エレガントなソリューションにつながることがわからないいくつかのトリックがあるかもしれないと思っていた。 –

+0

2つのスクリプトに+1します。でも、あなたはcshに固執すべきだとは思っていません!( - : –

3

やあ、

I 非常にはbashやzshのような何かに向けて離れCSHから移動をお勧めします。

cshではstdio操作ができません。 「csh programming considered harmful」と読んでください。このトピックについての優雅な論文。

申し訳ありませんが、直接的な回答ではありませんが、あなたが長く固執すればするほど、cshの制約から頭を悩ますことになります。

多くのcsh構文が既にbashで利用可能になっていますので、学習曲線があまり急峻になることはありません。

ここでは、bashで書かれたものと同じものを簡単に紹介します。しかしそれはエレガントではありません。

#!/bin/bash 
TO_LOGFILE= "| tee -a ./install.log" 
tar -zxf Python-3.1.1.tgz 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Untar of Python failed. Exiting..."; exit 5 
fi 

cd Python-3.1.1 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Can't change into Python dir. Exiting..."; exit 5 
fi 
echo "============== configure ================" 
./configure 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Configure failed. Exiting..."; exit 5 
fi 
echo "================ make ===================" 
make 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Compile of Python failed. Exiting..."; exit 5 
fi 
echo "================ install ================" 
make install 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Install of Python failed. Exiting..."; exit 5 
fi 

cd .. 
rm -rf Python-3.1.1 2>&1 ${TO_LOGFILE} 
exit 0 

私は少しより多くのチェックおよびレポート追加しましたので、エラーがからかなり無用のエラー・メッセージのスタックではなく、発見されるまで、ログファイルがちょうど含まれています、以前の段階で問題がある場合いずれにしても完了しない後の段階。

歓声、

+0

どうすればbashで行うことができますか? –

+0

@Shelly、added。 ( - : –

+0

@ Shelly、コンソールに複製したかったのを忘れた –

0

あなたはサブシェルでそれを実行し、そのすべての出力をリダイレクトすることができます。これがcshで動作するかどうか覚えていない、私はそれを使用して以来、長い、長い時間でした。

#!/bin/csh -f 
(
tar -zxf Python-3.1.1.tgz 
cd Python-3.1.1 
./configure 
make 
make install 
cd .. 
rm -rf Python-3.1.1 
) |& tee install.log 
関連する問題