sudo -u ユーザー名 -s "cmd arg" は、コマンドが見つからないことを返します。

sudo -u ユーザー名 -s "cmd arg" は、コマンドが見つからないことを返します。

私は次のコマンドを実行しました。

sudo -u elasticsearch -s "ulimit -Hn"

Ubuntu 11.10で試すまで、ユーザーelasticsearchに表示されるulimit -Hn値を返します。そこから以下が返されます。

/bin/bash: ulimit -Hn: command not found

いくつかの他のコマンドを試しましたが、パラメータを使用すると、常に「コマンドが見つかりません」というメッセージが表示されます。

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

パラメータが必要なコマンドを実行する方法についてのアイデアはありますかsudo

答え1

二重引用符を削除する必要があります。 "ulimit -Hn"というコマンドを単一のコマンド(スペースなどを含む)として実行しようとします。コマンドラインの最後のオプション-sでなければならず、次の引数はすべて実行に渡されます。sudosudo$SHELL -c

sudo -u elasticsearch -s ulimit -Hn

現在の方法では、コマンドラインから引数をエスケープして空白を含む引数を渡すことができるため、処理方法が-s変更されたようです。$SHELL

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

以前のパラメーター処理方法では、パラメーター'/tmp/foo bar'を2つの部分に分割してコマンドを中断しました。

関連情報