ユーザーbashスクリプトのルートシェルで実行

ユーザーbashスクリプトのルートシェルで実行

具体的には、インストールフォルダの作成など、いくつかのタスクをrootとして実行する必要があるスクリプトがあります。私は試した:

echo "Linux user password is needed in order to ..."
sudo -s
# also tried:
# sudo su
... code that requires root permission
exit
... code that requires user permission

問題は、「sudo -s」の後にスクリプトが停止し、自動的に生成されたルートシェルを手動で終了した後にのみスクリプトが続行されることです。

ユーザースクリプトでrootシェルコマンドを実行する方法はありますか?

ありがとうございます。

答え1

うん、こんなことだから

sudo mkdir /mnt/mymountpoint

あなたができること

sudo ./myrootscript.sh

適切なパラメータを確認すると、スクリプトは自分自身を再度呼び出すことができるため、ファイルは1つだけ残ります。

答え2

どちらも間違った方法で使用していますsudosu単に書いたりsudo -s別にsudo su書いたりすると、最終的にスクリプト内で生成された対話型シェルが完成します。これらは命令ですする

必要なのでシェルコードピースrootとして実行するには、何らかの方法で単一のコマンドでラップする必要があります。おそらく最も簡単な方法は、明示的なサブシェルを使用することです。

echo "Linux user password is needed in order to ..."
sudo sh -c '
 ... code that requires root permission
'

もちろん、スクリプトの他の場所で定義されているいくつかの変数を使用しようとすると問題が発生します。この場合、一重引用符の代わりに二重引用符を使用します。

しかし、ルートとして実行する必要があるコマンドがいくつかある場合は、sudo各コマンドを実行する前に使用するのが最善です。

関連情報