私は次のコマンドを実行しました。
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
でなければならず、次の引数はすべて実行に渡されます。sudo
sudo
$SHELL -c
sudo -u elasticsearch -s ulimit -Hn
現在の方法では、コマンドラインから引数をエスケープして空白を含む引数を渡すことができるため、処理方法が-s
変更されたようです。$SHELL
$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'
以前のパラメーター処理方法では、パラメーター'/tmp/foo bar'
を2つの部分に分割してコマンドを中断しました。