如何从csh脚本重定向stdout和stderr

时间:2009-12-04 20:09:58

标签: redirect 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和输出,而无需要求用户进行重定向?

3 个答案:

答案 0 :(得分:7)

一些简单的解决方案:

解决方案1: 要想要独立记录每一行,请使用-a T恤开关追加

#!/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:添加第二个脚本。 例如,将当前install.csh重命名为install_commands, 然后添加一个新的install.csh脚本:

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

答案 1 :(得分:3)

天儿真好,

高度建议远离csh转向bash或zsh之类的东西。

在csh中无法进行stdio操作。读一读“csh programming considered harmful”。关于这个主题的优雅论文。

对不起,这不是一个直接的答案,但你会发现,你坚持不懈地坚持克服csh的限制,你坚持使用它的时间越长。

bash中已经有很多csh语法,所以你的学习曲线不会太陡。

这是对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

我添加了更多的检查和报告,以便如果在前面的步骤中出现问题,日志文件将只包含直到错误被发现,而不是来自后期阶段的一堆非常无用的错误消息无论如何都不完整。

欢呼声,

答案 2 :(得分:0)

您可以在子shell中运行它并重定向它的所有输出。不记得这是否适用于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