Perché sfuggire a personaggi banali nella shell script?


23

Ho appena aperto uno script di shell legacy (scritto nella vecchia ksh88 su Solaris) e ho trovato quanto segue ripetuto in tutto il codice:

[ -f $myfile ] && \rm -f $myfile

La backslash in fuga mi sembra strano.

So che è intenzionale, poiché questo tipo di fuga (apparentemente inutile) si ripete in tutto il codice. L'autore originale è scomparso da tempo, non riesco a contattarlo per chiederglielo.

È semplicemente una divertente idiosincrasia dell'autore o è una sorta di buona pratica deprecata che aveva senso ad un certo punto nel tempo? O forse è in realtà il modo raccomandato di fare le cose e mi manca qualcosa del tutto?


3
Sebbene ci sia una buona ragione per questo, fornire protezione alias in uno script usando questo metodo non è ciò che definirei "consigliato". Sarebbe sufficiente cancellare l'alias nella parte superiore dello script o invocare rmcon il percorso completo.
Sorpigal,

Risposte:


25

Questo è usato per la protezione alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b

5

È generalmente buona norma introdurre alcune garanzie per rm, che di solito si ottiene con l'aliasing. In ambienti multiutente, vedrai spesso molte di queste protezioni in atto.

Per un praticante di scripting di shell, è spesso utile disabilitare queste protezioni perché presumibilmente sanno cosa stanno facendo. Questo, come detto, si ottiene anteponendo il comando a \.

Contrariamente al suggerimento di @ Sorpigal, consiglierei sicuramente di non annullare gli alias, per evitare che lo script non restituisca all'utente le proprie garanzie. Inoltre, non è saggio usare un percorso completo poiché rm può trovarsi in un percorso ausiliario per un motivo, ad esempio GNU rm vs. BSD rm. Superarlo con un percorso rigoroso significherebbe sconfiggere lo scopo di avere PERCORSI, vale a dire, scalare e gestire molte architetture, ambienti e utenti.


3
Nonostante sia comune, l'aliasing rmnon è una pratica buona ma piuttosto povera e sfortunata.
jlliagre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.