現在、sed
を使用して、stdin
からApache構成ファイルに書き込みます。このスクリプトでsed
を使用して、bashスクリプトの制限を回避しています。この場合、呼び出し元のユーザーはファイルに書き込む権限を持っていないため、単にecho "..." >> outputfile.conf
これが私がwritingに対してファイルに持っているものです:
echo "<VirtualHost *:80>
...
</VirtualHost>" | Sudo sed -n "w/etc/Apache2/sites-available/000-default.conf"
どうすればこの同じファイルにappendできますか?
if $enable_ssl; then
echo "<VirtualHost *:443>
...
</VirtualHost>" | Sudo sed <opions-to-sed-here>
fi
より高い/異なる特権を持つShell >
の通常の置き換えは次のとおりです。
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
echo
なし:
string=$'"<VirtualHost *:443> \
... \
</VirtualHost>"'
Sudo sed -i '$a\'"${string}"'' file
-i
オプションは、sed
にファイルをインプレースで処理するように指示します(オプションで、元のバージョンにサフィックスを追加します)。
Sedスクリプト:
$
最終行に一致a\
一致する行の後にテキストを追加しますただし、空のファイルでは機能しません(最後の行と一致する入力行がないため)。
完全を期すために、手元にed
がある場合:
echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | Sudo ed protectedFile
$
最後の行に移動a
append、その後に単一のドットを含む行で終了する追加したいデータw
はwrite(file)の略です最初の2つのコマンドは連結できます($a
)、まだこれは空のファイルでは機能しません-「最後の行に移動する」(これはnoであるため) -op)、 "append"ではなく "append to last line"、これは実際には存在しません。