2016-07-14 20 views
3

sudoを使用して別のユーザーとしてscreenを実行しようとしています。私はコマンドを使用していsudo:コマンドが見つかりません

echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls' 

をインターネット上で見つかったすべてのヘルプはsudoは(PATHのような)環境変数をクリアすることを言います。だから私はアプリケーションへの完全なパスを使用することにしましたが、まだコマンドが見つかりません。エラー。

エラー:須藤は、システムにインストールされている

sudo: /usr/bin/screen -ls: command not found 

。 画面がシステムにインストールされています。

sudoの場合、私は-E-Hフラグを試しましたが、それは役に立ちません。

私はこのような何か使用してPATH変数を設定しようとしました:

... | /usr/bin/sudo -u 'myuser' -S 'env PATH=$PATH; /usr/bin/screen -ls' 

たぶん$PATHは、コマンドが実行される前に拡大することとしましたが、私は他のエラーを得ていたが...

誰かが提供できますコマンドを使用すると、別のユーザーとしてコマンドを実行し、コマンドの各部分が何をして理解できるかを説明できます。

ありがとうございました。

+0

この質問はStackExchangeサイト[**スーパーユーザー**](http://superuser.com/)または[** ServerFault **](http://serverfault.com/) –

+0

正確な(コピーして貼り付けた)エラーメッセージを表示するために質問を更新してください。ところで、 'sudo'は' $ PATH'を完全にリセットしません。/usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin' –

+1

私は、話題はプログラミングの問題ではないからです。 [unix.se]を試してみてください。 –

答えて

0

コマンドを引用符で囲む必要はありませんが、コマンドを引用符で囲む必要はありません。

echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S screen -ls

+0

コマンドの引用符を削除すると作業が終了しました。しかし、なぜ? 渡されたコマンドは引数であり、PHPでescapeshellarg関数を使用してエスケープしました。 –

+0

@BradleyOdell - 'escapeshellarg()'は引用符の間のすべてのスペースをエスケープします。 – alvits

+0

@alvits私はそうは思わない。それはその周りに一重引用符を追加するだけです。 –

3

しようとすると、新しいパス変数を設定しようとしているときに

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH 

は、おそらくあなたがパス変数を置き換えます。

今後、新しいパス変数を追加する前に 'echo $ PATH'を実行してください。

関連する問題