echo "" | sudo -S 作为 sudo -n 的替代

echo "" | sudo -S 作为 sudo -n 的替代

我使用的是 Debian Lenny。不幸的是,出厂 sudo 软件包不包含 sudo 1.7 版附带的 -n 选项。我真的很想有一种方法可以指定“如果 sudo 要求输入密码,我宁愿立即失败,而不是挂在提示符上”。这个替代方案可行吗?

echo "" | sudo -S -u lalala command 

答案1

这只适用于某些命令。当需要密码时,sudo 会以某种不太好看的方式按预期失败。但是,当不需要密码时,换行符将通过管道传输到您使用 sudo 运行的命令中。

猫工作正常:

cacheson@segfault:~$ echo "" | sudo -S -u cacheson cat file.txt 
text file

vim 不会:

cacheson@segfault:~$ echo "" | sudo -S -u cacheson vim file.txt 
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...

Vim: Finished.

答案2

你的命令最终也会从标准输入读取(因为克里斯·艾奇逊)。你最好将标准输入从终端重定向回来。

echo | sudo -S -u lalala sh -c 'command </dev/tty'

相关内容