我用来执行命令:
sudo -u elasticsearch -s "ulimit -Hn"
Run Code Online (Sandbox Code Playgroud)
并且它返回用户 elasticsearch 看到的 ulimit -Hn 的值,直到我在 Ubuntu 11.10 上尝试它。在那里它返回:
/bin/bash: ulimit -Hn: command not found
Run Code Online (Sandbox Code Playgroud)
我尝试了几个不同的命令,当我使用参数时,我总是得到“找不到命令”:
$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found
Run Code Online (Sandbox Code Playgroud)
关于如何执行需要参数的命令的任何想法sudo
?
cam*_*amh 16
您需要删除双引号。它试图将名为“ulimit -Hn”的命令作为单个命令、空格和所有命令运行。-s
需要是命令行sudo
上的最后一个选项sudo
,所有以下参数都传递$SHELL -c
给执行。
sudo -u elasticsearch -s ulimit -Hn
Run Code Online (Sandbox Code Playgroud)
我想-s
处理方式已经改变,因为当前的方式允许您通过$SHELL
在命令行上转义它们来传递带有空格的参数:
$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'
Run Code Online (Sandbox Code Playgroud)
旧的参数处理方法会将'/tmp/foo bar'
参数分成两部分,从而破坏命令。