注意:我最终让一切正常运转起来 - 即安装一个 CLI(Tenderly),但我想知道为什么它不能正常工作,从而防止将来在压力下出现挫败感。
规定的方式:
curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-macos.sh | sh
错误
➜ ~ sudo curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-linux.sh | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1151 100 1151 0 0 1859 0 --:--:-- --:--:-- --:--:-- 1856
Installing version 1.4.5
Moving CLI to /usr/local/bin/
mv: cannot move 'tenderly' to '/usr/local/bin/tenderly': Permission denied
Tenderly CLI installed to:
sh: 41: tenderly: not found
New Tenderly version installed:
➜ ~ ls /usr/local/bin/tenderly
ls: cannot access '/usr/local/bin/tenderly': No such file or directory
这包括使用或不使用 sudo 调用 curl。
然后我运行了以下命令:
➜ ~ touch temp
➜ ~ mv temp /usr/local/bin
mv: cannot move 'temp' to '/usr/local/bin/temp': Permission denied
➜ ~ sudo mv temp /usr/local/bin #okay
为什么 sudo 在一种情况下有效,而在另一种情况下无效? curl 或该脚本是否会产生失去 sudo 权限的新进程?
我通过将脚本下载为文件并运行它来安装它。
> curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-macos.sh > install.sh
> sudo install.sh
答案1
当执行已弃用的、不安全的、不安全的命令时:
sudo somecommand | sh
仅somecommand
作为 运行root
,其STDOUT
通过管道传输到sh
,后者作为 运行$USER
。
这可能是过去的复制错误。虽然不安全且不可靠,但有效的方法是:
somecommand | sudo sh
更安全、更可靠的方法是:
somecommand >install.sh
# Read the file, figure out what it does
less -Mersj4 install.sh
# if you like what install.sh does
# Maybe`sudo apt install watchinstall`
# and run this under `installwatch`
sudo ./install.sh
信任但要验证。