因此,我不得不卸载一些我在 macOS Sierra(10.12.2)上从源代码编译的命令行工具,并注意到当我运行时在终端中返回了这些类似结构的命令sudo make uninstall
:
sudo make uninstall
HTop的输出:
( cd '/usr/local/share/applications' && rm -f htop.desktop )
( cd '/usr/local/bin' && rm -f htop )
( cd '/usr/local/share/man/man1' && rm -f htop.1 )
( cd '/usr/local/share/pixmaps' && rm -f htop.png )
sudo make uninstall
MTR的输出:
( cd '/usr/local/share/man/man8' && rm -f mtr.8 )
( cd '/usr/local/sbin' && rm -f mtr )
sudo make uninstall
SSHPASS的输出:
( cd '/usr/local/bin' && rm -f sshpass )
( cd '/usr/local/share/man/man1' && rm -f sshpass.1 )
我觉得很奇怪,每个命令本质上都是cd
进入一个目录,然后rm -f
与该命令一起运行cd
。为什么不直接rm -f
使用完整路径的文件,就像这样;例如使用这里的 SSHPASS 输出:
rm -f '/usr/local/bin/sshpass'
rm -f '/usr/local/share/man/man1/sshpass.1'
我理解手动输入此类命令时需要保证安全,但在预设脚本的情况下(其过程本身应该干净且无风险),将 make 脚本删除项目作为复合命令有什么好处?
答案1
我只能认为这是由于过去曾经犯过的一个错误造成的。
基本上有人不小心在文件路径中插入了一个额外的空格,然后将其删除;参见例如 GitHub 上的这个提交。
通过这样做cd '/usr/local/share/man/man8' && rm -f mtr.8
- 如果命令的第一部分,即cd
失败,它将根本不会运行rm -f
。这是一种故障保护。