Кто-нибудь может объяснить команду :файл--*

Если пакет недоступен в ваших источниках пакетов, вы не сможете найти никакой информации через локальные средства. Получить информацию о судьбе пакета в Debian можно на сайте :https://packages.debian.org/package-name, https://bugs.debian.org/package-name, https://packages.qa.debian.org/First letter of name/package-name.

[На странице пакета вы можете увидеть, что roxtermприсутствует в wheezy и jessie, но не в buster, и его больше нет в нестабильном. Также есть ссылка на страницу QA.

На странице QA вы найдете информацию о том, почему пакет был автоматически удален из тестирования и как пакет может быть полностью удален из Debian..

Компания Roxterm была удалена из списка нестабильных версий в июне 2016 года по причине

ROM¹; Upstream discontinued; has RC bug

Если вы не хотите брать на себя обслуживание Roxterm, вам лучше найти альтернативу.

Подробности в Ошибка #827768 .

¹Запрос сопровождающего .

-1
10.09.2020, 14:37
2 ответа
file -- *

Здесь будет код на языке оболочки Unix.Язык оболочки Unix, специализирующийся на поиске и запуске команд в новых процессах, передаче им аргументов и переменных среды и подключении к их стандартным потокам ввода/вывода/ошибок.

Этот язык находится в зачаточном состоянии, но имеет несколько причудливых особенностей.

Эта строка в примере простой команды в грамматике языка оболочки.

Пробелы используются для разделения слов. Здесь file, --и *.

Первое слово, здесь file, принимается за имя запускаемой команды. Оболочка будет искать путь к этой команде, используя специальную переменную $PATH. Я мог бы быть чем-то вроде /usr/bin/file.

Слово *содержит подстановочный знак оболочки (*), поэтому оно запускает специальную функцию оболочек, которая называется генерацией имени файла или подстановкой(POSIX называет это расширение имени пути). Оболочка заменит *списком имен файлов, соответствующих этому шаблону. *— это шаблон, который соответствует любому количеству символов. Таким образом, оболочка расширит все имена всех файлов в текущем каталоге (за исключением скрытых ), отсортированных по алфавиту.

Затем оболочка разветвит дочерний процесс, и в этом дочернем процессе будет выполняться /usr/bin/fileс file, --и этим списком имен файлов (, поэтому в вашем случае -file04, -file05... )в качестве аргументов.

Команда fileявляется отдельной от shкомандой. В то время как работа shзаключается в анализе командной строки, работа fileзаключается в том, чтобы попытаться определить характер содержимого файла.

При запуске, как и большинство команд, fileбудет анализировать свои аргументы. Первый fileпросто говорит ему, как он называется, как он должен обращаться к себе, как в сообщениях об ошибках. Следующие аргументы говорят ему, что делать.

Как и в большинстве команд, аргументы, начинающиеся с -, считаются опциями. Здесь первый аргумент — --. Технически,это не опция, это маркер конца -из -. Он сообщает file, что с этого момента следует прекратить обработку опций и что следующие аргументы не должны приниматься как опции, даже если они начинаются с -.

Что здесь хорошо, так как следующий аргумент, -file01, на самом деле не предназначался для использования в качестве опции, а был именем файла для file, чтобы рассказать о характере его содержимого.

Вам нужно, чтобы --при передаче не -аргументов опции, которые начинаются с -(+, также могли возникнуть проблемы с некоторыми командами )или могут начинаться с -/ +, например, когда они результат некоторого расширения, как при использовании cmd -- "$arg", cmd -- *, cmd -- "${args[@]}", cmd -- $(cmd2)...

Невыполнение этого требования может привести к ошибкам и уязвимостям в системе безопасности.

Для аргументов, которые должны быть путями к файлам, другой подход заключается в добавлении префикса к аргументам, которые не начинаются с /, с./(./-foo/barи -foo/barкак к путям к одному и тому же файлу, но только последний может быть взят как вариант ). Использование этого подхода может быть необходимо для команд, которые не поддерживают --в качестве конца -маркера опции -, а также могут обойти другие проблемы, такие как -, интерпретируемое как значение stdin вместо файла. вызывается -, даже если передается после --или awkобработки аргументов, содержащих =.

4
18.03.2021, 23:05

Большинство консольных утилит GNU не могут работать с файлами, начинающимися с дефиса, если вы не передадите им --, например.

$ cat -file1

производит

cat: invalid option -- 'f'
Try 'cat --help' for more information.

Вот почему в вашем случае требуется --, так как он указывает утилите fileпрекратить обработку параметров и обрабатывать остальные аргументы как файлы.

Интересно, можно ли как-то использовать эту особенность, потому что она выглядит жизнеспособной. Отправьте человеку несколько файлов, например. tar и попросите их выполнить какое-либо действие, например. command *. Файлы, начинающиеся с тире, будут интерпретироваться как варианты, если пользователь не проявит должной осмотрительности, а большинство этого не делает. Например, я не помню, когда в последний раз использовал --, потому что у меня нет ни одного файла, начинающегося с дефиса.

0
18.03.2021, 23:05

Теги

Похожие вопросы