Bash、新しいシェルを呼び出してコマンドを実行します。

Bash、新しいシェルを呼び出してコマンドを実行します。

次のスクリプトを作成しようとしています。

#!/bin/bash
sudo -s
something...

実行すると、新しいシェルが作成されますが、シェルの内部ではなく作成されたsomethingシェルを終了したときにのみ実行されます。sudo -s

助けが必要ですか?

ベストアンサー1

別の方法は、完全なbashコマンドを次に渡すことですsudo

#!/bin/bash
sudo bash -c 'command1; command2; command3;'

しかし、より良いアプローチは始めることです。スクリプトそしてsudoその逆です。これをsudoスクリプトに入れるのは良い考えではありません。 root権限()でスクリプト全体を実行するのが最善ですsudo script.sh。必要にsudo応じて、その権限を使用して特定のコマンドを削除できます。たとえば、

#!/usr/bin/env bash
whoami
echo $HOME
sudo -u terdon whoami  ## drop privileges for specific command.

上記のスクリプトを実行すると、次のものが返されます。

$ sudo ~/scripts/a.sh
root
/root
terdon

おすすめ記事