2009-05-23 3 views
1

私はreplaceUpと呼ばれるPerlスクリプトがあります。Perlを使ってシェルスクリプトを作るにはどうすればいいですか?

#!/usr/bin/perl           

search=$1 
replace=$2 

find . -type f -exec perl -p -i -e "s/$search/$replace/g" {} \; 

スクリプトがロードされませんが。これは私のスクリプトが間違っていることを示唆しています。

どのようにしてPerlを使ってシェルスクリプトを作成できますか?

答えて

10

最初の行は#!/bin/shで、#!/usr/local/bin/perlではありません。あなたはそれがPerlスクリプトであると誤解されています。これはPerlを呼び出すシェルスクリプトです。

$ searchと$ replaceは一重引用符で補間されないため、実際には動作しません。一重引用符を使用してください二重引用符内。

また、さらにお試しください。my mass search/replace Perl script大量検索/置換が危険なので、シェルメタキャラクター解釈の複数のレベルを必要としないため、これは危険なものから完全に致命的なものまで、純粋なPerlスクリプトを保持しています。

+0

ありがとうございました! - arg - 私のスクリプトはシェルスクリプトとしては恐ろしいです。シェルを二重引用符で始めると、スクリプトは自分のルートのすべてを置き換えて削除し始めました。 - 何が悪くなったのか分かりません。 –

+0

@Chaos:ファイルが自分のルートで削除されたことを確認する方法はありますか? –

+4

@マシ:あなたは誰でログインしましたか?ユーザー 'root'?もしそうならば、愚かな、愚かな、愚かな。 Perl、シェル、または他のタイプのスクリプトをrootとして探検しないでください。間違いは致命的になる可能性があります。あなたは絶対に必要なときにのみ、あなたがしようとしていることが何の問題も引き起こさないと確信しているときにのみ、「root」を使用します。その 'find'コマンドは、ルートディレクトリで実行され、/ bin/shのようにあらゆる種類のファイルにダメージを与える可能性があります。あなたがそれが良いより多くの害を及ぼさないことを確かめるまで、決してrootとして何も実行しないでください! (rootとしてログインしないでください) –

関連する問題