2017-04-19 76 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