我曾经执行命令:
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'
参数分成两部分,从而破坏命令。