Зачем избегать тривиальных символов в сценарии оболочки?


23

Я только что открыл устаревший скрипт оболочки (написанный на старом ksh88 на Solaris) и обнаружил, что во всем коде повторяется следующее:

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

Убегающий обратный слеш кажется мне странным.

Я знаю, что это преднамеренно, так как этот вид (очевидно бесполезный) экранирования повторяется по всему коду. Первоначальный автор давно ушел, я не могу связаться с ним, чтобы спросить его.

Это просто забавная идиосинкразия автора или это какая-то устаревшая хорошая практика, которая имела смысл в какой-то момент времени? Или, может быть, это действительно рекомендуемый способ, и я что-то упускаю вообще?


3
Хотя для этого есть веская причина, обеспечение защиты псевдонимов в сценарии с использованием этого метода не является тем, что я бы назвал «рекомендуемым». Было бы достаточно очистить псевдоним в верхней части скрипта или вызвать rmпо полному пути.
Сорпигал

Ответы:



5

Обычно хорошей практикой является использование некоторых защитных механизмов для rm, что обычно достигается за счет псевдонимов. В многопользовательских средах вы часто будете видеть многие из этих средств защиты.

Для специалиста по написанию сценариев оболочки часто полезно отключить эти меры безопасности, так как они, по-видимому, знают, что делают. Как уже упоминалось, это достигается путем добавления команды к команде \.

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


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