私は現在sed
fromを使用しています。呼び出すユーザーがファイルに書き込む権限がない bash スクリプトの制限を回避するために、stdin
このスクリプトを使用しています。sed
echo "..." >> outputfile.conf
これは私の目的です。書くファイルとして:
echo "<VirtualHost *:80>
...
</VirtualHost>" | sudo sed -n "w/etc/apache2/sites-available/000-default.conf"
次は何をすべきですか?追加同じファイルに?
if $enable_ssl; then
echo "<VirtualHost *:443>
...
</VirtualHost>" | sudo sed <opions-to-sed-here>
fi
答え1
>
より高い権限または異なる権限を持つシェルの一般的な代替方法は次のとおりです。
echo "replace file content with this line" | sudo tee protectedFile >/dev/null
追加するには、以下を使用します-a
。
echo "append this line to file" | sudo tee -a protectedFile >/dev/null
答え2
いいえecho
:
string=$'"<VirtualHost *:443> \
... \
</VirtualHost>"'
sudo sed -i '$a\'"${string}"'' file
この-i
オプションは、sed
ファイルがその場所で処理されるように指示します(オプションで元のバージョンにサフィックスを追加します)。
sedスクリプト:
$
最後の行の一致a\
一致する行の後にテキストを追加する
ただし、空のファイルでは機能しません(最後の行に一致する入力行がないため)。
答え3
完全性のために、ed
次の事項があります。
echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
$
最後の行に移動a
追加してから追加するデータを入力し、単一の点を含む行で終わります。w
代表する書く(ファイル)
最初の2つのコマンドは接続(作成$a
)できますが、空のファイルでは機能しません。単独では動作します。「最後の行に移動」(無作為)「追加の」代わりに「最後の行に追加」、実際には存在しません。