Чому слід уникати тривіальних символів у сценарії оболонки?


23

Я щойно відкрив застарілий скрипт оболонки (написаний старим ksh88 на Solaris) і знайшов наступне повторення у всьому коді:

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

Нахил, який випливає, вражає мене як дивний.

Я знаю, що це навмисно, оскільки подібний (очевидно марний) втеча повторюється у всьому коді. Оригінального автора давно немає, я не можу зв’язатися з ним, щоб попросити його.

Це просто смішна ідіосинкразія автора чи це якась застаріла хороша практика, яка мала сенс у якийсь момент часу? А може, насправді є рекомендований спосіб робити речі, і я взагалі щось пропускаю?


3
Хоча для цього є вагомі причини, забезпечити псевдонім захист у скрипті за допомогою цього методу - це не те, що я б назвав "рекомендованим". Було б достатньо очистити псевдонім у верхній частині сценарію або застосувати rmповний шлях.
Сорпігал

Відповіді:



5

Як правило, добре застосовувати деякі гарантії для rm, що, як правило, досягається шляхом згладжування. У багатокористувацьких середовищах ви часто бачите багато таких засобів захисту.

Для практикуючих сценаріїв оболонок часто корисним є відключення цих гарантій, як імовірно, вони знають, що роблять. Це, як було сказано, досягається попередньою командою a \.

Всупереч пропозиції @ Sorpigal, я б точно не радив скасувати псевдоніми, щоб сценарій не міг повернути користувачеві свої гарантії. Крім того, використовувати повний шлях також нерозумно, оскільки rm може знаходитись у допоміжному шляху з причини - тобто GNU rm проти BSD rm. Перекрити його суворим шляхом було б перемогти мета PATH, а саме масштабувати та обробляти багато архітектур, середовищ та користувачів.


3
Незважаючи на те, що вони часто зустрічаються, псевдонім rmне є хорошою, але досить поганою та невдалою практикою.
jlliagre
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.