2016-05-23 5 views
0

を使用してアトミック機能を置き換えることができます:私のテキストでは、その後、どのように私が最初にシェルスクリプトに

[[email protected] ~]# cat calc.sh 
#! /bin/sh 
calc_func() 
{ 

    i=1; 
    j=2; 
    if [ $i -gt 0 ];then 
     return $(($i+$j)); 
    fi 
} 
calc_func 
echo $? 

と:私のシェルスクリプトで

[[email protected] ~]# cat calc.txt 
sub_func() 
{ 

    i=100; 
    j=200; 
    if [ $i -gt 0 ];then 
     return $(($i-$j)); 
    fi 

} 

、今、私はfunciton本体を交換したいのcalc.txtにsub_funcの本体を持つcalc.shの中でcalc_funcという名前を付けました。

[[email protected] ~]# cat calc.sh 
#! /bin/sh 
calc_func() 
{ 

    i=100; 
    j=200; 
    if [ $i -gt 0 ];then 
     return $(($i-$j)); 
    fi 

} 
calc_func 
echo $? 

私はシェルスクリプトでそれを達成したいのですが、どうすれば修正できますか?ヒント:ソースまたはエクスポートは使用できませんでした。

+0

「ソース」を使用できないのはなぜですか? – user1934428

+0

awkを使って2つの関数を '{}'で分割し、配列に格納しておけば、もう一方の関数コードを追加するだけです。 – hedgehog

+1

私はそれを手に入れません...関数自体は1つの場所になければなりません(そして手で編集することができます)...関数へのすべての呼び出しをsedに簡単に置き換えることができます(関数を含むファイルのソースがたくさんある場合) viからの単純な置き換え、または好きなエディタが1つのファイルであればそれを使うことができます。 – louigi600

答えて

1

head,tail,およびmvとすれば、かなり簡単に実行できます。例:

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 

これは、1行または短いスクリプトとして行うことができます。

calc.shcalc.sh.savになりましたし、新しいcalc.shcalc.txtから内側のブロックがあると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 $? 
関連する問題