Tim*_*Tim 3 shell sudo software-installation stdin
来自https://calibre-ebook.com/download_linux
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
Run Code Online (Sandbox Code Playgroud)
sudo -v &&鉴于上面man sudo说的,这里的目的是什么
Run Code Online (Sandbox Code Playgroud)-v, --validate更新用户的缓存凭据,必要时对用户进行身份验证。对于 sudoers 插件,默认情况下这会将 sudo 超时再延长 15 分钟,但不会运行命令。并非所有安全策略都支持缓存凭据。
目的是什么sh /dev/stdin?(在 Ubuntu 18.04 中,sh是破折号)
谢谢。
\n\n这里的目的是什么
\nsudo -v &&?
我相信这可以最大限度地减少用户的惊讶。考虑两种情况:
\n相对:
\n在第一种情况下,对 sudo 的两次调用都成功,没有任何提示。问题解决了!
\n在第二种情况下,同样有两种可能性:用户最近已经通过 sudo 身份验证,或者还没有。
\nsudo -v只需更新其缓存凭据的时间戳即可。一旦该sudo -v过程成功,第二个sudo sh /dev/stdin调用应该使用其缓存的凭据并不间断地运行。
考虑没有初始sudo -v命令的替代方案(其中 sudo 仍配置为提示输入密码)。在这种情况下,wget可能已将输出写入 stdout 或 stderr,这可能会导致用户错过看到它并想知道为什么没有发生任何事情。
\n\n目的是什么
\nsh /dev/stdin?
这里sh使用一个参数来调用,因为这command_file是一个特殊文件——指向标准输入的链接。
\n\nNAME\ndash\xe2\x80\x94 命令解释器(shell)
\n概要
\nRun Code Online (Sandbox Code Playgroud)\ndash ...\n [command_file [argument ...]]\n
结果,sh 读取 command_file,期待并执行其中的命令。该特殊的标准输入“文件”通过管道连接到 的输出wget,因此最终结果是将 URL 的内容发送到根级 shell。
我不知道为什么 Calibre 项目专门选择了这种语法。替代方案包括:
\n ... | sudo sh ... | sudo sh -