web-dev-qa-db-ja.com

ルート書き込み権限のみを持つファイルに行を追加し、スクリプトの実行を継続する方法

私はbashスクリプトを学習しようとしています。私は実用的な問題に取り組んでおり、ある時点で、root書き込み権限を必要とするファイルに行を追加する必要があります。

コードは次のようになります。

# some code
echo "add this line to the code" >> fileName
# some code

どういうわけかスクリプトにrootパスワードを要求させ、パスワードを検証し、認証が成功したらファイルを変更することは可能ですか?その後、スクリプトはユーザーモードに戻り、コマンドの実行を続行します。

9
Alex

Sudoのmanページに、このような方法を説明するヒントがあります。これが私のワンライナーです:

#!/usr/bin/bash
Sudo sh -c "echo \"add this line to the code\" >> fileName"

明らかに、最初にユーザーにSudo権限を設定する必要があります。ルートが所有するファイルへのリダイレクトのため、shシェルが使用されます。また、echoコマンドで使用した引用符をエスケープする必要がありました。

13
SigueSigueBen

suは、ほとんどのUNIXシステムで使用でき、機能するはずです。

su root -c 'echo "add this line to the code" >> fileName'
2
miracle173

teeSudoとともに使用できます。

echo "add this line to the code" | Sudo tee -a filename > /dev/null

echoの出力は|pipe)でSudo teeにリダイレクトされます。 tee標準入力から読み取り、標準出力に書き込みます。この場合はfilenameです。 -a(または--append)はteeをファイルに追加します。追加しない場合、ファイルは上書きされます。 teeSudoを指定して実行されるため、root権限でファイルを開きます。最後に、> /dev/nullteeの出力を標準出力に抑制します。

リダイレクトを含むコマンド全体をsu -cまたはSudo sh -cで開始するだけでなくteeを使用する利点の1つは、最初のコマンドの引用を変更する必要がないことです(すでに引用符を含んでいる引用行は、かなり醜くなることがあります)。

1
Adaephon

このコマンドを試してくださいこのコマンドはUnixおよびLinuxで使用できます。

Sudo sh -c "echo 'add this line to the code' >> fileName"

0
JongYoung