Po co unikać trywialnych znaków w skrypcie powłoki?


23

Właśnie otworzyłem starszy skrypt powłoki (napisany w starym ksh88 na Solarisie) i znalazłem następujące powtórzenia w całym kodzie:

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

Uciekający ukośnik wydaje mi się dziwny.

Wiem, że jest to celowe, ponieważ tego rodzaju (pozornie bezużyteczne) ucieczki powtarzają się w całym kodzie. Pierwotnego autora już dawno nie ma, nie mogę się z nim skontaktować, by go zapytać.

Czy jest to po prostu zabawna osobliwość autora, czy też jest to jakaś przestarzała dobra praktyka, która w pewnym momencie miała sens? A może jest to właściwie zalecany sposób robienia rzeczy i coś zupełnie mi brakuje?


3
Chociaż jest ku temu dobry powód, zapewnienie ochrony aliasu w skrypcie przy użyciu tej metody nie jest tym, co nazwałbym „zalecanym”. Wystarczy wyczyścić alias u góry skryptu lub wywołać rmpełną ścieżkę.
Sorpigal,

Odpowiedzi:



5

Zasadniczo dobrą praktyką jest wrzucanie pewnych zabezpieczeń dla rm, co zwykle osiąga się przez aliasing. W środowiskach dla wielu użytkowników często widzisz wiele z tych zabezpieczeń.

Dla praktyka skryptów powłoki często przydatne jest wyłączenie tych zabezpieczeń, ponieważ prawdopodobnie wiedzą, co robią. Jak wspomniano, osiąga się to poprzez zastąpienie polecenia znakiem \.

W przeciwieństwie do sugestii @ Sorpigal, zdecydowanie odradzam rozbrajanie aliasów, aby skrypt nie zwrócił użytkownikowi zabezpieczeń. Ponadto użycie pełnej ścieżki jest również nierozsądne, ponieważ rm może znajdować się w ścieżce pomocniczej z jakiegoś powodu - tj. GNU rm vs. BSD rm. Zastąpienie go ścisłą ścieżką oznaczałoby pokonanie celu posiadania PATH, a mianowicie skalowania i obsługi wielu architektur, środowisk i użytkowników.


3
Pomimo tego, że aliasing rmjest powszechny, nie jest dobrą, ale dość złą i niefortunną praktyką.
jlliagre
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.