我需要你帮助理解sudo的这种行为。
sudo -s -- 'ls -l'
此命令有效但sudo 'ls -l'
引发错误说法
sudo: ls -l: command not found
我意识到它将引用中的整个字符串视为单个命令(包括空格),但我不知道的是它如何与-s
标志一起正常工作但在{{1}时失败不存在。
答案 0 :(得分:4)
没有-s
,第一个参数是要执行的命令的名称。对于-s
,第一个参数是传递给-c
选项的字符串,无论使用什么shell($SHELL
或您的系统shell)来执行参数。
即,假设$SHELL
为sh
,以下内容相同:
sudo -s -- 'ls -l'
sudo -- sh -c 'ls -l'
答案 1 :(得分:2)
-s [command]
-s(shell)选项运行SHELL环境变量指定的shell(如果已设置)或shell中指定的shell 密码数据库。如果指定了一个命令,则将其传递给 shell通过shell' s -c选项执行。如果没有命令 如果指定,则执行交互式shell。
它的行为与它的行为相似,因为会生成一个新的shell,它会破坏"引用命令中的单词"像贝壳一样。