3

Поэтому мне пришлось удалить некоторые инструменты командной строки, которые я скомпилировал из исходного кода в macOS Sierra (10.12.2), и заметил, что эти команды с аналогичной структурой возвращаются в Терминале при запуске sudo make uninstall:

Вывод sudo make uninstall 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 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 ответ1

1

Я могу только думать, что это из-за ошибки, которая когда-то была сделана в прошлом.

В основном кто-то случайно вставил лишний пробел в путь к файлу и удалил его; посмотрите этот коммит на GitHub например.

cd '/usr/local/share/man/man8' && rm -f mtr.8 - если первая часть команды, cd завершится неудачей, он никогда не запустит rm -f вообще. Это отказоустойчиво.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .