私はbashスクリプトを学習しようとしています。私は実用的な問題に取り組んでおり、ある時点で、root
書き込み権限を必要とするファイルに行を追加する必要があります。
コードは次のようになります。
# some code
echo "add this line to the code" >> fileName
# some code
どういうわけかスクリプトにrootパスワードを要求させ、パスワードを検証し、認証が成功したらファイルを変更することは可能ですか?その後、スクリプトはユーザーモードに戻り、コマンドの実行を続行します。
Sudo
のmanページに、このような方法を説明するヒントがあります。これが私のワンライナーです:
#!/usr/bin/bash
Sudo sh -c "echo \"add this line to the code\" >> fileName"
明らかに、最初にユーザーにSudo
権限を設定する必要があります。ルートが所有するファイルへのリダイレクトのため、sh
シェルが使用されます。また、echo
コマンドで使用した引用符をエスケープする必要がありました。
su
は、ほとんどのUNIXシステムで使用でき、機能するはずです。
su root -c 'echo "add this line to the code" >> fileName'
tee
をSudo
とともに使用できます。
echo "add this line to the code" | Sudo tee -a filename > /dev/null
echo
の出力は|
(pipe)でSudo tee
にリダイレクトされます。 tee
は標準入力から読み取り、標準出力に書き込みます。この場合はfilename
です。 -a
(または--append
)はtee
をファイルに追加します。追加しない場合、ファイルは上書きされます。 tee
はSudo
を指定して実行されるため、root権限でファイルを開きます。最後に、> /dev/null
はtee
の出力を標準出力に抑制します。
リダイレクトを含むコマンド全体をsu -c
またはSudo sh -c
で開始するだけでなくtee
を使用する利点の1つは、最初のコマンドの引用を変更する必要がないことです(すでに引用符を含んでいる引用行は、かなり醜くなることがあります)。
このコマンドを試してくださいこのコマンドはUnixおよびLinuxで使用できます。
Sudo sh -c "echo 'add this line to the code' >> fileName"