2016-04-17 45 views
0

私は今、Ubuntu用のbashスクリプトを書いています。 私は多くのsed文を置き換え、ファイル内のテキストを変更します。sedコマンドが変更されたかどうか確認してください。

私の質問は:どのように変更が行われたかどうかを知ることができます。

例えば、私はこの文を持っている:

sed -i "s;#net.ipv4.ip_forward=1;net.ipv4.ip_forward=1;" /etc/sysctl.conf 

は実際に作られたファイルに変更ましたか?

+0

スクリプトを表示します。 – randominstanceOfLivingThing

+0

バックグラウンドで何も実行しないと、 'sed'コマンドは終了すると終了し、スクリプト内の次のコマンドが実行されます。 'sed'の終了コードは、それが成功したかどうかを示します。簡単に言えば、もしあれば何でも;エコー "成功"; else echo "失敗"; fi' – tripleee

+0

@SureshKoya私は質問 –

答えて

0

cmpを使用して、ファイルの古いバージョンと新しいバージョンを比較することができます。実際、sedがあるかどうかを判断する最も信頼できる方法は、おそらく何かです。

sed終了ステータスを使用して変更が行われたかどうかは判断できません。すべての存在ステータスは、sedが「成功した」かどうかを示します。

GNU sedのmanページやinfoページには、終了ステータスが記録されていません。この動作は「実装の詳細」であり、変更される可能性があります。

0

$?シェル変数を使用して、コマンドの結果を確認できます。

また、一致が見つからない場合は、sedコマンドの戻り状況を変更することもできます。関連リンク:GNU AwkのでReturn code of sed for no match

+1

これは変更が書き込まれたかどうかを明らかにしていません。ほとんどのスクリプトは '$? 'を明示的に調べる必要はありません。 'if'と' while'などはあなたのためにシーンの後ろでこれを行います。 – tripleee

0

if gawk --inplace '/^#net\.ipv4\.ip_forward=1$/ { sub("#",""); s=1 } 
    1 
    END { exit 1-s }' /etc/sysctl.conf 
then 
    echo "Success" 
else 
    echo "No change" 
fi 

これは正しく(許可は、ファイルが見つからない、などを拒否された)変更なしとシステム・エラーを区別するために失敗しました。 Awkを実行する前にこれらの条件をチェックしたいと思うかもしれません。あるいは、明らかに$?を調べて、それが失敗ブランチで1でなければ悲鳴を上げるかもしれません。

また、正規表現はあなたの例より厳しいことに注意してください。あなたが真にその中の他のテキストを含む行のどこかで変更を望むならば、あなたは適応する必要があります。

関連する問題