sudo -u username -s“cmd arg”返回未找到的命令

Modified on: Sat, 30 Jun 2018 04:45:00 +0800

我以前执行命令:

sudo -u elasticsearch -s "ulimit -Hn"

它正在返回ulimit -Hn的值,正如用户elasticsearch所见,直到我在Ubuntu 11.10上尝试它。它返回:

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

我尝试了几个不同的命令,当我使用一个参数时,我总是得到“命令未找到”:

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

关于如何通过sudo执行需要参数的命令的任何想法?

最佳答案

您需要删除双引号。它试图将一个名为“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'参数拆分为两个,从而破坏命令。

作者:camh

相关问答

添加新评论