我在谷歌搜索了很多,但找不到。
我有一个csh脚本来创建一个文件。有许多echo命令我想重定向到文件。
我不想在每个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
答案 0 :(得分: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 ####"
如果您也想重定向错误,请在另一个.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