`alias rm =“ rm -i ”` considerado prejudicial?

17

Eu li há algum tempo (não consigo encontrar a referência) que o uso de um pseudônimo como alias rm="rm -i"era muito ruim.

Existe evidência histórica ou explicação do senso comum para esse fato?

Eu imagino que isso dá ao usuário o mau hábito de confiar no prompt de confirmação para verificar seu comando, o que pode levar a desastres se ele o fizer em outro perfil que não possua o alias.

Dunaril
fonte
Acho que encontrei o tópico que você mencionou.
Daniel Beck
1
@ Daniel, de fato, a resposta mais votada deste tópico menciona essa prática ruim, mas não é realmente o tópico central da pergunta.
Dunaril

Respostas:

36

Você está certo.

É ruim porque você se acostuma. Se você estiver em um sistema que não o possui, e você rm, ele imediatamente será excluído e você estará se perguntando o que está acontecendo.

Muitos usuários estão acostumados a fazer SSH em diferentes sistemas; portanto, o uso de vários sistemas diferentes, às vezes sem a configuração de contas de usuário personalizadas (incluindo aliases), é bastante comum.

Em vez disso, use, por exemplo, alias rmi='rm -i'e aprenda a usar esse. Se isso não estiver configurado em um sistema diferente, você não excluiu acidentalmente os arquivos e sempre pode voltar a digitar o comando completo.

Daniel Beck
fonte
4

Como o @Daniel disse, não é prejudicial por si só, além de treinar você a esperar que ele esteja lá. De fato, é a configuração padrão nas máquinas CentOS (e, por extensão, RHEL, presumo - faz muito tempo desde que usei uma) máquinas, e é uma enorme dor no tuchus . Durante o resto do meu tempo naquele show, digitei / bin / rm para evitar a configuração "Linux para pessoas que não deveriam ter acesso root".

Andrew Beals
fonte
3
O RHEL tem isso por padrão, você está certo, pelo menos nos sistemas que usei.
Daniel Beck
4

Eu acho que o grande perigo é que as pessoas possam confiar em algo assim para filtrar uma glob. Imagine que você deseja excluir algumas imagens de um diretório, mas não todas:

rm -i pics/*.jpg

Você pode usar isso para filtrar a glob manualmente, o que seria completamente razoável. Mas, se você o aliasse e estivesse usando rme por acaso pousasse em uma concha sem esse apelido e tente ... você acabou de excluir todas as suas fotos, oops!

Pessoalmente, também acho esse apelido prejudicial à minha pressão arterial;). Mas isso sou só eu.

Erro fatal
fonte
Belo exemplo. Claro, se você gosta de perigo, ou jogos de azar ..
Dunaril
2

Além do que Daniel Beck disse, eu encontrei-me usando -fpara ignorar o -ique é potencialmente perigosa, que resulta no uso rm -fe rm -rfdesnecessariamente. De alguma forma relacionada: uma maneira de evitar rm -rfproblemas é criar um arquivo chamado "-i", como foi respondido em resposta a esta pergunta: Como faço para impedir rm -rf / * acidental? .

Mas, novamente, se esse apelido não estivesse lá, eu não usaria -f, e a coisa toda não será um problema.

lupincho
fonte
3
Parece que você encontrou uma maneira de fazer esta prática ruim ainda pior :)
Dunaril
0

Isso é muito menos prejudicial, com base na minha experiência de trabalho com centenas de usuários no passado:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • Os usuários são treinados para usar curingas corretamente, não apenas '*' e, em seguida, contando com os avisos y / n para selecionar arquivos
  • O condicionamento para o uso de curingas corretos geralmente salvava o desastre quando usado rmem algum outro contexto que não possuía essa função ou o rm -ialias.
  • Passei menos tempo restaurando arquivos nos quais o usuário digitou 'y' muitas vezes
  • Os usuários precisam responder apenas uma vez - fornecendo um feedback positivo agudo ao usá-lo
  • Control-c interrompe o trabalho e são relatórios como não fazendo nada
  • Não é um script, portanto, o real rmé intocado, deixando outros programas sem medo.

O estilo do código é principalmente compatível com sh (exceto o uso echo .... | tr -d '\012'para shells anteriores ao bash), fique à vontade para tornar o seu próprio mais específico do bash. Não estou postando para compartilhar o código em si, mas para compartilhar a mudança na experiência do usuário que vem com ele.

Alex North-Keys
fonte
Kamil: Minha resposta inclui que rm -ihistoricamente (na minha experiência de ter centenas de usuários) resulta em exclusão incorreta de arquivos e que a função incluída treinou os usuários a usar curingas corretos, diminuindo a taxa de erro. Portanto, eu lidei com questões importantes que atormentavam rm -i e forneci uma solução por conveniência, e o simples fato de os marcadores estarem embaixo da função não os impede de serem relevantes.
Alex norte-Keys