带引号的sudo命令行为

时间:2015-09-24 14:56:29

标签: linux bash unix sudo

我需要你帮助理解sudo的这种行为。

sudo -s -- 'ls -l'此命令有效但sudo 'ls -l'引发错误说法 sudo: ls -l: command not found我意识到它将引用中的整个字符串视为单个命令(包括空格),但我不知道的是它如何与-s标志一起正常工作但在{{1}时失败不存在。

2 个答案:

答案 0 :(得分:4)

没有-s,第一个参数是要执行的命令的名称。对于-s,第一个参数是传递给-c选项的字符串,无论使用什么shell($SHELL或您的系统shell)来执行参数。

即,假设$SHELLsh,以下内容相同:

sudo -s -- 'ls -l'
sudo -- sh -c 'ls -l'

答案 1 :(得分:2)

来自sudo man page

  

-s [command]

     

-s(shell)选项运行SHELL环境变量指定的shell(如果已设置)或shell中指定的shell   密码数据库。如果指定了一个命令,则将其传递给   shell通过shell' s -c选项执行。如果没有命令   如果指定,则执行交互式shell。

它的行为与它的行为相似,因为会生成一个新的shell,它会破坏"引用命令中的单词"像贝壳一样。