2016-05-27 3 views
1

私は別のスクリプトをsudoとして呼び出すスクリプトを持っています。 2番目のスクリプトの中から、別のプロセス sudoの権限なしで実行できるようにしたいとします(問題のプロセスはbrewです。これはsudoでうまくいきません)。スクリプト内のsudoからのエスケープ

ここで問題のコードです:

scriptA.sh:

#!/bin/sh 

sudo ./scriptB.sh 

scriptB.sh:

#!/bin/sh 

# This runs as sudo, but I need it to run as a regular user e.g. `username` 
brew update 

私はsu -c "brew update" -s /bin/sh usernameを試してみましたが、OS Xのsucを許可していませんが、フラグ。

+0

'scriptB.sh'を' sudo'で実行したくない可能性があります。スクリプト内の特定のコマンドだけです。 – chepner

答えて

4

もう一度sudoを使用します。

sudo -u username brew update 
+0

ありがとう!これは完全に機能しました。 –

0

スーパーユーザーは他のユーザーになるsuコマンドを使用することができます。だから、

su otheruser -c "command to execute" 

OS X su-cオプションを許可しません。あなたはユーザー名の後にそれを置く必要があります。マニュアルページから:

オプションのargsがコマンドラインで提供されている場合は、ターゲットログインのログインシェルに渡されます。ターゲットログイン名より前のすべてのコマンドライン引数はsu自身によって処理され、ターゲットログイン名の後ろのすべてがログインシェル に渡されることに注意してください。

-cは、suコマンドのオプションではないため、ログインシェルのオプションです。ほとんどのシェルは-cオプションを使って実行するコマンドを指定します。

+0

あなたの答えをありがとう!しかし、私が記事で述べたように、 'su'はOS Xで' -c'オプションを受け入れません。 –

+0

私はそれをテストしました。コマンドを試したときに、ユーザ名をコマンドに入れるのを忘れてしまった。 – Barmar

関連する問題