私は初めてバッシュに触れました。私は多くの行とコマンドで構成されたスクリプトを書いています。複数のパッケージを入手してインストールするために使用されるインストールファイル。したがって、スクリプトで次のような多くのインストールコマンドを使用する必要があります。
sudo apt install python2.7 python-pip
sudo
スクリプトがあまりにも多くのコマンドを使用しないように、sudo
各コマンドの前に削除し、次のタスクを実行することにしましたsudo ./setup.sh
。
sudo
うまく動作しますが、問題は、その前に実際に必要とされないいくつかのコマンドがあることです。たとえばmkdir
、wget
そして...
実行スクリプトを使用すると、sudo ./setup.sh
このスクリプトを使用して作成されたディレクトリは、使用せずに削除、コピー、または編集できませんが、sudo
すべてのユーザーがアクセスできるようにしたいです。だから私の質問は次のようになります
sudo(スーパーユーザー権限など)を使用してスクリプトを実行するときに、特定の内部コマンド(スーパーユーザー権限など)をsudo ./setup.sh
実行しない方法はありますか?mkdir
wget
ベストアンサー1
を使用すると、sudo
切り替えを指示したユーザー(デフォルトではroot)で新しいシェルを起動します。sudo
これにより、SUDO_USER
変数がそのユーザーのユーザー名に設定されます。
$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"
私がやっているように、このスクリプトを実行すると、変数が設定されていないので何も得られません。
$ foo.sh
SUDO_USER:
しかし、:で実行するとsudo
変数が設定されます。
$ sudo foo.sh
SUDO_USER: terdon
これを念頭に置いて、スクリプトを起動したユーザーのユーザー名を使用して、通常のユーザーとして実行したい特定のコマンドを簡単に実行できます。したがって、スクリプトで通常のユーザーとして実行したいと他のコマンドをwget
変更し、ルートの代わりに通常のユーザーとして実行するように実行します。chmod
sudo -u $SUDO_USER
apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER
このSUDO_USER
変数を使用すると、作成したすべてのディレクトリとファイルがスクリプトを起動したユーザーによって所有され、スクリプトを実行するたびにそのユーザーの名前をスクリプトに明示的に通知する必要がなくなります。