sudo -u用户名-s“ cmd arg”返回找不到命令


10

我曾经执行命令:

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


为什么-s呢?只需保留普通的shell并使用它执行命令即可。如sudo -u elasticsearch ls all.sh。如果elasticsearch具有无法使用的默认外壳,请-s bash 实际命令之前使用。
glglgl 2011年

Answers:


16

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


您在哪里测试了它不会拆分命令?
Zarathustra

@Zarathustra那是五年前的事-我记不起来了。我建议您仔细阅读sudo源代码历史记录-您应该能够找到行为何时发生了变化。
卡姆,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.