Por que os scripts de desinstalação do código fonte “cd” no diretório antes de excluir um arquivo?

3

Então eu tive que desinstalar algumas ferramentas de linha de comando que eu compilei da fonte no macOS Sierra (10.12.2) e notei que esses comandos de estrutura similar retornaram no Terminal quando eu corro sudo make uninstall :

Saída de sudo make uninstall para o 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 )

Saída de sudo make uninstall para MTR:

( cd '/usr/local/share/man/man8' && rm -f mtr.8 )
( cd '/usr/local/sbin' && rm -f mtr )

Saída de sudo make uninstall para SSHPASS:

( cd '/usr/local/bin' && rm -f sshpass )
( cd '/usr/local/share/man/man1' && rm -f sshpass.1 )

Parece estranho para mim que cada comando seja essencialmente cd ing em um diretório e, em seguida, execute rm -f em conjunto com o comando cd . Por que não apenas rm -f do arquivo diretamente com o caminho completo como este; usando a saída SSHPASS aqui, por exemplo:

rm -f '/usr/local/bin/sshpass'
rm -f '/usr/local/share/man/man1/sshpass.1'

Eu entendo a necessidade de estar seguro ao digitar manualmente um comando como este, mas no caso de um script predefinido - em que o processo em si deve estar limpo e isento de riscos - qual é o benefício do script make remover itens como um comando composto?

    
por JakeGould 03.01.2017 / 16:00

1 resposta

1

Eu só posso pensar que isso por causa de um erro que já foi cometido no passado.

Basicamente, alguém acidentalmente inseriu um espaço extra em um caminho de arquivo e o excluiu; veja este commit no GitHub por exemplo .

Fazendo cd '/usr/local/share/man/man8' && rm -f mtr.8 - se a primeira parte do comando, o cd falhar, ele nunca executará o rm -f . É uma falha segura.

    
por 03.01.2017 / 16:05