Я знаю, что rm -f file1
насильно удаляю, file1
не подсказывая мне.
Я также знаю, что rm -i file1
сначала подскажет мне перед удалениемfile1
Теперь, если вы выполните rm -if file1
, это также будет принудительно удалено file1
без запроса меня.
Тем не менее, если вы выполните rm -fi file1
, он предложит мне перед удалением file1
.
Так правда ли, что при объединении опций команд последний будет иметь приоритет? как rm -if
, тогда -f
будет иметь приоритет, но -fi
тогда rm -i
будет иметь приоритет.
Команда, ls
например, не имеет значения, если вы сказали ls -latR
или ls -Rtal
.
Так что я думаю, что это имеет значение только тогда, когда у вас есть противоречивые параметры команды, как rm -if
, это правильно?
command-line
rm
command
options
alkabary
источник
источник
Ответы:
При использовании
rm
с обоими-i
и-f
опциями первый будет игнорироваться. Это задокументировано в стандарте POSIX :а также на
info
странице GNU :Давайте посмотрим, что происходит под капотом:
rm
обрабатывает свой вариантgetopt(3)
, в частностиgetopt_long
. Эта функция будет обрабатывать аргументы опции в командной строке (**argv
) в порядке появления:Эта функция обычно вызывается в цикле, пока не будут обработаны все параметры. С этой точки зрения функции обрабатываются по порядку. Однако то, что происходит на самом деле, зависит от приложения, поскольку логика приложения может выбрать обнаружение конфликтующих опций, их переопределение или сообщение об ошибке. Для вариантов
rm
и,i
иf
параметры, они отлично перезаписывают друг друга. Отrm.c
:Оба параметра устанавливают одинаковые переменные, и состояние этих переменных будет зависеть от того, какой параметр последний в командной строке. Эффект этого соответствует стандарту POSIX и
rm
документации.источник
rm
). Я думаю, что команда редко принимает первый параметр параметра и игнорирует аргументы, которые могли бы изменить уже установленный параметр.Да,
rm
это действительно. Если последний параметр отменяет предыдущие, это зависит от самой программы. Из «Инфо РМ»Как общий совет:
info
обычно более подробно, чемman
само, как правило, более подробно, чем--help
вариант.источник
Флаги не имеют «приоритета», каждая программа обрабатывает их так, как хочет. Большинство предпринимают некоторые усилия, чтобы собрать все флаги и проверить наличие конфликтов, для стандартных инструментов (например, на которые есть ссылки
rm(1)
) соответствующие стандарты могут требовать чего-то (но, опять же, ваша конкретная версия может быть неаккуратной при интерпретации угловых случаев стандарта / не проходит специальной проверки) для них).Программисту, пишущему программу, проще всего рассматривать аргументы (флаги и другие) в строгом порядке слева направо и, возможно, выручить при попадании в какое-то затруднение. Если для обработки флагов используется библиотека (например
getopt(3)
, существует несколько версий), то программист, по-видимому, делает то, что получается наиболее легко / естественно. Программисты - это люди, люди ленивы (или, по крайней мере, не любят думать о комбинаторном взрыве).источник