【问题标题】:csh script - Redirect block of commands to filecsh 脚本 - 将命令块重定向到文件
【发布时间】:2017-04-19 12:38:38
【问题描述】:

我在 Google 上搜索了很多,但找不到。

我有一个创建文件的 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

【问题讨论】:

    标签: shell csh


    【解决方案1】:

    你不能。 foreach - for 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 ####"
    

    如果您也想重定向错误,请将整个 foreach 包含在另一个 .csh 脚本中,然后将输出重定向到 /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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多