如何使用 shell 脚本以原子方式替换函数



首先:在我的外壳脚本中:

[root@localhost ~]# cat  calc.sh 
#! /bin/sh
calc_func()
{
    i=1;
    j=2;
    if [ $i -gt 0 ];then
        return $(($i+$j));
    fi
}   
calc_func  
echo $?

然后,在我的文字中:

[root@localhost ~]# cat calc.txt 
sub_func()
{  
    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi
}

现在,我想将 calc.sh 中名为 calc_func 的函数体替换为 sub_func 的 Calc.txt 主体;让它变成这样:

[root@localhost ~]# cat  calc.sh 
#! /bin/sh
calc_func()
{
    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi
}   
calc_func  
echo $?

我想用shell脚本实现它,我该如何解决它? 提示:源或导出无法使用。

你可以

相当容易地使用headtailsedmv来完成。例如:

head -n 2 calc.sh >tmp.sh
sed -n '/{/,/}/p' calc.txt >> tmp.sh
tail -n2 calc.sh >> tmp.sh
mv calc.sh calc.sh.sav; mv tmp.sh calc.sh

您可以将其作为单行或简短脚本来执行此操作。

您的原始calc.sh现在处于calc.sh.sav状态,并且带有calc.txt内块的新calc.sh处于calc.sh状态,例如

$ cat calc.sh
#! /bin/sh
calc_func()
{
    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi
}
calc_func
echo $?

相关内容

  • 没有找到相关文章

最新更新