Как «уменьшить» файл с именем «-»?

Я записал такую вещь в PHP использование адаптеров, одна вещь, которую мы сделали, была, создают флаг sys_parsed для маркировки то, что было импортировано (или отказавшим). В основном отслеживайте так, Вы не заканчиваете тем, что пробовали импорт, который не работает навсегда.

Это анализирует тысячи sqlite файлов и импортирует это в singl mysql дб с таблицей на клиента. Но это - определенно не 15 лайнеров. Существует намного больше к нему, если Вы хотите надежный импорт. Это довольно производительно также, не большая загрузка.

Если это интересует Вас, я мог бы смотреть и видеть, могу ли я совместно использовать его (записанный для клиента)

17
18.06.2015, 11:47
3 ответа

Просто добавьте к нему префикс ./ :

less ./-

Или используйте перенаправление:

less < -

Обратите внимание, что с - (в отличие от -x или - foo - например) считается специальным именем файла, а не параметром, следующее не работает:

less -- -   # THIS DOES NOT WORK
53
27.01.2020, 19:46

Я бы просто mv - f && less f . Задача решена.

3
27.01.2020, 19:46

Примечание: мой ответ НЕ действителен в случае OP и применяется только к инструментам, следующим соглашению, упомянутому ниже, а не в случае файла, названного точно только - (тире), что часто также является особым случаем, чтобы указать, что ожидается чтение из стандартного ввода. См. Принятый ответ.

Оставим это здесь, поскольку оно содержит полезную информацию для других случаев, на которые можно наткнуться при поиске ответов.


Двойное тире!

Используйте стандартное соглашение о двойном тире ( - ) для обозначения последнего аргумента:

less -- -FILENAME

Пример

$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!

Whhhaattt?

Этот - аргумент проистекает из соглашение, поддерживаемое большинством реализаций утилит оболочки и инструментов командной строки, и большинство оболочек явно отстаивают то, что вы должны следовать ему при реализации инструментов CLI.

Рекомендуется Open Group

OpenGroup также упоминает его в разделе Описание служебных программ по умолчанию (v6) своей базовой спецификации:

Поведение по умолчанию: [...] Стандартные утилиты, которые не принимать параметры, но которые принимают операнды, должны распознавать «-» в качестве первого аргумента, который следует отбросить.

Требование к распознаванию «-» обусловлено тем, что соответствующим приложениям необходим способ защиты своих операндов от любых произвольных опций, которые реализация может предоставить в качестве расширения. Например, если стандартная утилита foo указана как не имеющая параметров, и приложению необходимо дать ей путь с начальным дефисом, она может безопасно сделать это как:

 foo - -myfile 
 

и избегайте проблем с использованием -m в качестве расширения.

И в Рекомендации по синтаксису служебной программы (v7):

Рекомендация 10: Первый аргумент, который не является аргументом-опцией, следует принимать как разделитель, обозначающий конец опций. Все следующие аргументы следует рассматривать как операнды, даже если они начинаются с символа «-».

Рекомендуется Bash

Здесь, выдержка из руководства bash, о его встроенных функциях, поддерживающих его:

Если не указано иное, каждая встроенная команда, задокументированная в этом разделе, как принимающая параметры, которым предшествует - accept - для обозначения конца из вариантов.

Встроенные команды:, true, false и test не принимают параметры и не обрабатывают их - особенно. Встроенные команды exit, logout, break, continue, let и shift принимают и обрабатывают аргументы, начинающиеся с - без необходимости -. Другие встроенные команды, которые принимают аргументы, но не указаны как принимающие параметры, интерпретируют аргументы, начинающиеся с - как недопустимые параметры и требуют - чтобы предотвратить эту интерпретацию.

Обратите внимание, что эхо не интерпретирует - то есть означает конец параметров.

Дополнительная литература

3
27.01.2020, 19:46

Теги

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