bashスクリプトを学ぶつもりです。時々root
書き込み権限を必要とするファイルに行を追加する必要がある実際の問題を解決しています。
コードは次のとおりです。
# some code
echo "add this line to the code" >> fileName
# some code
どういうわけか、スクリプトからルートパスワードを要求し、パスワードを確認し、成功した確認後にファイルを変更することができますか?その後、スクリプトはユーザーモードに戻り、コマンドを実行し続ける必要があります。
答え1
sudo
マニュアルページには、このようなタスクを実行する方法を説明するヒントがあります。私が言ったことは次のとおりです。
#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"
当然、権限を取得するには、まずユーザーを設定する必要がありますsudo
。sh
ルートが所有するファイルにリダイレクトされるため、シェルが使用されます。また、echo
コマンドで使用された引用符をエスケープする必要がありました。
答え2
su
ほとんどのUNIXシステムで利用可能で動作します。
su root -c 'echo "add this line to the code" >> fileName'
答え3
あなたはtee
それを使用することができますsudo
:
echo "add this line to the code" | sudo tee -a filename > /dev/null
echo
の出力は|
(管路)到着するsudo tee
。
tee
次から読む標準入力そしてに手紙を書く標準出力与えられたファイル(この場合はfilename
. -a
(または--append
))がtee
ファイルに追加され、それが存在しない場合はファイルが上書きされます。tee
実行すると、sudo
root権限を持つファイルが開きます。最後に出力を> /dev/null
抑制します。tee
標準出力。
tee
su -c
コマンド全体(使用またはリダイレクトを含む)を開始する代わりに、使用の1つの利点は、いかなるsudo sh -c
方法でも初期コマンドへの参照を変更する必要がないことです(すでに引用符を含む行を引用すると、時々非常に見苦しくなることがあります。 )。
答え4
トリックを行います。
ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"