sudo -u 用户名 -s "cmd arg" 返回命令未找到

sudo -u 用户名 -s "cmd arg" 返回命令未找到

我曾经执行命令:

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

答案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'参数分成两部分,从而破坏命令。

相关内容