我使用的是 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'