2016-10-07 2 views
0

ファイルの継続的に増加する段落に新しい行を追加するbashスクリプトを作成しようとしています。スクリプトを実行するたびに、その段落に新しい行が追加されるはずですが、代わりにファイルの内容全体が返されます。デフォルトsedことでbashを使って成長する段落に新しい行を追加する

ここに私のコードだ...

function registerServiceProvider { 
    # register service provider inside config/app.php 
    sed '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php 
} 
registerServiceProvider 

答えて

1

stdoutへの結果のストリームを出力します。 GNU sedをお持ちの場合は、-iを使用してファイルをインプレースで変更できます。多くのBSD sedでは-iを使用できますが、作成されたバックアップファイルに追加される拡張子になる引数が必要です。

さらにPOSIXyのままにしたい場合は、出力を新しいファイルにリダイレクトしてから、その一時ファイルを古い名前に移動するか、出力をリダイレクトしてアクセス権を変更しないようにすることができます。しかし、リダイレクトを1つのステップでやろうとはしないでください。シェルが最初に行うことはファイルを切り捨てるので、それを読み取ろうとすると空になります。 GNUは、sedので

だから、あなたが行うことができます:

sed -i -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php 

やBSDで(引数作品やGNUのが、GNUではオプションです)

sed -i .bak -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php 

や移植性

sed '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php > tmp_paragraph 
cat tmp_paragraph > ./config/app.php 
rm tmp_paragraph 

repoNameproviderの変数がexpを取得するシェル変数になるようにするsedスクリプトを二重引用符で囲む必要がありますbashは、単一引用符付き文字列内の変数を展開しません。

sed -i -e "/App\\\\Providers\\\\*::class,/a \\ App\\\\Providers\\\\${repoName}${provider}::class," ./config/app.php 

をし、bashは二重の内部エスケープ文字として扱うになるので、我々はスラッシュの余分なエスケープの多くをしなければならなかったことに注意してください:だから、GNU sedの例を取るために、あなたはそうのように二重引用符を使用するように変更します引用符。私たちは一重引用符を使用して変数を外側に置くことができます(そして、引用符を二重にすることに注意してください。なぜなら、それらの実際のバックスラッシュを得るためには、

sed -i -e '/App\\Providers\\*::class,/a \ App\\Providers\\'${repoName}${provider}'::class,' ./config/app.php 
+0

コードはエラーなしで実行されますが、このファイルに新しい文字列は追加されません。 – Ohssie

+0

@Ohssieファイルへの書き込み権限がありますか?私がサンプルファイルを作成すると、 'AppProvider $ {repoName ...}が自分で追加されます。これらのオプションを指定せずに実行すると、行が追加されていますか? –

+0

私はその行を追加しましたが、そのように見えることは意図されていません。これは、スクリプトを実行する際に、1つの単語入力を求めるプロセスです。その関数は、このような行を "App \ Providers \ user_inputServiceProvider :: class"ファイルに追加することを意図しています。 – Ohssie

関連する問題