2017-04-19 279 views
0

我在谷歌搜索了很多,但无法找到。csh脚本 - 重定向命令块到文件

我有一个csh脚本来创建一个文件。有很多我想重定向到文件的回显命令。

我不想重定向到每个echo命令中的文件。有没有什么办法可以让它在单个命令中阻塞并写入文件。

这里是我的脚本

myscript.sh

#!/bin/csh 

set file_dir="/home/user/somedir" 
set output_file="/home/user/outputdir/details.txt" 

#Block Starts Here 
echo "Write Something" 
echo "Some content goes here" 
echo "Dir : $file_dir" 
echo "Destination : $output_file" 
echo "Generated at : `date`" 

foreach file (`ls $file_dir`) 
    set file_name="$file_dir""/""$file" 
    set cksum=`cksum $file_name` 
    set md5=`md5sum $file_name` 
    set checksum=`echo $cksum | awk -F' ' '{$NF=""; print $0}'` 
    set md5sum=`echo $md5 | awk -F' ' '{$NF=""; print $0}'` 
    echo "#### START ####" 
    echo "File Name : $file" 
    echo "Checksum : $checksum" 
    echo "MD5Sum : $md5sum" 
    echo "#### END ####" 
end 
# Block Ends Here 

回答

1

你不能。 foreach - 对于csh - 是内部命令,所以它不能被重定向。

这是我的建议:

myscript.csh

#!/bin/csh 

set file_dir="/tmp" 
set output_file="/tmp/details.txt" 

#Block Starts Here 
echo "Write Something" 
echo "Some content goes here" 
echo "Dir : $file_dir" 
echo "Destination : $output_file" 
echo "Generated at : `date`" 

foreach file (`ls $file_dir`) 
    set file_name="$file_dir""/""$file" 
    set cksum=`cksum $file_name` 
    set md5=`md5sum $file_name` 
    set checksum=`echo $cksum | awk -F' ' '{$NF=""; print $0}'` 
    set md5sum=`echo $md5 | awk -F' ' '{$NF=""; print $0}'` 
    csh logger.csh $file $checksum $md5sum >> $output_file 
end 
# Block Ends Here 

然后添加以下

logger.csh

#!/bin/csh 
echo "#### START ####" 
echo "File Name : $1" 
echo "Checksum : $2" 
echo "MD5Sum : $3" 
echo "#### END ####" 

如果你想REDIR ECT错误太多,包括在另一个.csh脚本整体的foreach然后重定向输出到/ dev/null的


或者:

myscript.csh

#!/bin/csh 
set file_dir="/tmp" 
set output_file="/tmp/details.txt" 
csh block.csh $file_dir $output_file > $output_file >& /dev/null 

block.csh

#!/bin/csh 
set file_dir=$1 
set output_file=$2 
#Block Starts Here 
echo "Write Something" 
echo "Some content goes here" 
echo "Dir : $file_dir" 
echo "Destination : $output_file" 
echo "Generated at : `date`" 

foreach file (`ls $file_dir`) 
    set file_name="$file_dir""/""$file" 
    set cksum=`cksum $file_name` 
    set md5=`md5sum $file_name` 
    set checksum=`echo $cksum | awk -F' ' '{$NF=""; print $0}'` 
    set md5sum=`echo $md5 | awk -F' ' '{$NF=""; print $0}'` 
    echo "#### START ####" 
    echo "File Name : $file" 
    echo "Checksum : $checksum" 
    echo "MD5Sum : $md5sum" 
    echo "#### END ####" 
end 
# Block Ends Here