質問: / etc / apache2 / sites-availableでsedを使用するにはどうすればよいですか? sedを使用してapacheのdefaultファイルをコピーして書き込むスクリプトを作成しようとしています/var/www(以下の$doc_root)を自分のディレクトリ$new_sites_dirに置き換えた新しいファイル。ただし、sedはsudoで正しく動作していません。次の場合に "permission denied"エラーが発生します。sudo sed -ie 's:$doc_root:$new_sites_dir:g' < default > $new_site 私はしようとしました サブシェルをスポーンします sudo sh -c "sed -ie 's:$doc_root:$new_sites_dir:g' < default > $new_site" そして使用する tee sudo sed -ie 's:$doc_root:$new_sites_dir:g' < default | sudo tee $new_site しかし、代わりに "入力ファイルがありません"エラーが発生します。私が書いた最後の2つの試みは少しずれていると確信しています。任意の提案をいただければ幸いです。[〜#〜]回答済み[〜#〜]皆様のご協力に感謝いたします。正確なコマンドは次のとおりです。sudo sed -e "s:$def_sites_dir:$new_sites_dir:g" < $def_site | sudo tee $new_site そしてここに この参照 からのキーフレーズがあります: これで眠りにつくことはありませんが、いつか便利になります。コマンドの「>」の後に「sudo」が適用されない理由がわかったら、tシャツを覚えてここに戻ってください。
回答: あなたの問題は-iです。これは、sedにファイルをその場で編集するように指示していますが、リダイレクトすることによってstdinでファイルを提供しています。 -iを削除してみてください。sedはファイル名を引数として受け入れるため、入力ファイルをリダイレクトする必要はありません。ファイルの読み取り権限が制限されている場合は、sudo sed(およびリダイレクトを使用しない)がそれを処理します。 -iを使用しないと、元のファイルはそのまま残ります。sudo teeは、必要に応じて出力の書き込み権限を処理する必要があります。