Reputation:
I searched in Google a lot, but couldn't find.
I have a csh script to create a file. There are many echo commands which I want to redirect to a file.
I don't want to redirect to the file in each echo command. Is there any way we can make it block and write to file in single command.
Here is my script
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
Upvotes: 0
Views: 569
Reputation: 1583
You cannot. foreach - for csh - is internal command, so it can't be redirected.
This is what I suggest:
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
Then add the following
logger.csh
#!/bin/csh
echo "#### START ####"
echo "File Name : $1"
echo "Checksum : $2"
echo "MD5Sum : $3"
echo "#### END ####"
If you want to redirect errors too, include whole foreach in another .csh script then redirect output to /dev/null
Alternatively:
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
Upvotes: 1