Каков общий синтаксис команды оболочки Unix?

В частности, почему это иногда - опции к некоторым командам, предшествуются a + подпишитесь и иногда a - знак?

например:

sort -f
sort -nr
sort +4n
sort +3nr
10
задан Lazer 29 January 2010 в 06:34
поделиться

4 ответа

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

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

-121--3763909-

Для изменения размера изображения при загрузке можно использовать библиотеку PHP GD .

Следующий код должен дать вам представление о том, как реализовать изменение размера:

// Get the image info from the photo
$image_info = getimagesize($photo);
$width = $new_width = $image_info[0];
$height = $new_height = $image_info[1];
$type = $image_info[2];

// Load the image
switch ($type)
{
    case IMAGETYPE_JPEG:
        $image = imagecreatefromjpeg($photo);
        break;
    case IMAGETYPE_GIF:
        $image = imagecreatefromgif($photo);
        break;
    case IMAGETYPE_PNG:
        $image = imagecreatefrompng($photo);
        break;
    default:
        die('Error loading '.$photo.' - File type '.$type.' not supported');
}

// Create a new, resized image
$new_width = 180;
$new_height = $height / ($width / $new_width);
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Save the new image over the top of the original photo
switch ($type)
{
    case IMAGETYPE_JPEG:
        imagejpeg($new_image, $photo, 100);
        break;
    case IMAGETYPE_GIF:
        imagegif($new_image, $photo);         
        break;
    case IMAGETYPE_PNG:
        imagepng($new_image, $photo);
        break;
    default:
        die('Error saving image: '.$photo);
}
-121--4321081-

В настоящее время стандарт POSIX с использованием getopt () (он же getopt (3) ) широко используется в качестве стандартного обозначения, но в первые дни люди экспериментировали На некоторых компьютерах команда sort больше не поддерживает нотацию + . Однако различные команды (особенно ar и tar ) принимают элементы управления без какого-либо символа префикса - и dd (на которые ссылается Алок в комментарии) вообще используют другое соглашение.

Соглашение GNU об использовании « -- » для длинных параметров (поддерживается getopt _ long (3) ) было изменено с использования « + ». Конечно, X11 программное обеспечение использует один тире перед многосимвольными опциями. Итак, все дело в коллекции исторических реликвий, когда люди экспериментировали с тем, как лучше с этим справиться.

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


Какие существуют стили обработки опций?

[В свое время SO 367309 содержал следующий материал в качестве моего ответа. Он был первоначально задан 2008-12-15 02:02 FerranB , но впоследствии был закрыт и удален.]

Сколько различных типов опций вы распознаете? Я могу думать о многие, в том числе:

  • Однобуквенные варианты, которым предшествует одинарный тире, группируемый при наличии нет аргумента, аргумент может быть присоединен к букве опции или в следующем argument (много, много команд Unix; большинство команд POSIX).
  • Однобуквенные параметры, которым предшествует одинарный тире, группировка недопустима, должны быть присоединены аргументы (RCS).
  • Однобуквенные параметры, которым предшествует одинарный тире, группировка недопустима, аргументы должны быть отдельными (pre-POSIX SCCS, IIRC).
  • Параметры из нескольких букв, которым предшествует один тире, могут быть аргументами прилагается или в следующем аргументе (X11 программы; также Java и многие программы на Mac OS X с наследием NEXTSTEP).
  • Варианты с несколькими буквами, которым предшествует один тире, могут быть сокращены (Atria Clearcase).
  • Варианты с несколькими буквами, которым предшествует один плюс (устаревший).
  • Варианты с несколькими буквами, которым предшествует двойной тире; аргументы могут следовать за «» = или быть отдельной (утилиты GNU).
  • Параметры без префикса/суффикса, некоторые имена имеют сокращения или являются подразумевается, что аргументы должны быть отдельными. ( AmigaOS Shell )

Для выбора необязательного аргумента иногда необходимо присоединить аргумент ( co-p1.3 rcsfile.c ), иногда он должен следовать за знаком «» = «». POSIX не поддерживает опционально аргументы содержательно (POSIX getopt () разрешает их только для последнего в командной строке).

Во всех разумных системах опций используется опция, состоящая из двойного тире (' -- ') для обозначения «конца вариантов» - следующие аргументы: «non-option arguments» (обычно имена файлов; POSIX называет их «операндами») даже если они начинаются с тире. (Я рассматриваю поддержку этой нотации как императив. Помните, что если - предшествует параметр, требующий аргумента, то - будет рассматриваться как аргумент для параметра, а не как маркер «конца параметров».)

Многие, но не все программы принимают один тире в качестве имени файла для обозначения стандартный ввод (обычно) или стандартный вывод (иногда). Иногда, как и в случае GNU ' tar ', оба могут использоваться в одной командной строке:

... | tar -cf - -F - | ...

Первый соло-тире означает 'write to stdout'; второй означает «прочитанный файл» имена из stdin '.

Некоторые программы используют другие соглашения, то есть опции, которым не предшествует тире. Многие из них из самых старых дней Unix. Например, «tar» и «ar» принимают опции без тире, поэтому:

tar cvzf /tmp/somefile.tgz some/directory

Команда dd использует opt = value исключительно:

dd if=/some/file of=/another/file bs=16k count=200

Некоторые программы позволяют перемежать опции и другие аргументы полностью; компилятор C, make и утилиты GNU работают без POSIXLY_CORRECT в среде являются примерами. Многие программы ожидают параметры, предшествующие другим аргументам.

Обратите внимание, что git и другие команды VCS часто используют гибридную систему:

git commit -m 'This is why it was committed'

В качестве одного из аргументов используется подкоманда. Часто существуют дополнительные «глобальные» параметры, которые могут быть заданы между командой и подкомандой. Примеры этого есть в POSIX; команда sccs находится в этой категории; можно утверждать, что некоторые другие команды, выполняющие другие команды, также относятся к этой категории: приятные и xargs пружинят к разуму от POSIX; sudo не является примером POSIX, как и svn и cvs .


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

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

Другим нежелательным поведением является непоследовательность в стиле обращения аргументы (особенно для одной программы, но также в рамках номера люкс программы). Либо требовать прикрепленные аргументы, либо требовать отсоединенные аргументы (или разрешить любой), но не имеют некоторых параметров, требующих присоединенный аргумент и другие, требующие отдельного аргумента. И быть непротиворечиво относительно того, может ли « = » использоваться для разделения параметра и аргумент.

Как и в случае со многими (связанными с программным обеспечением) вещами - согласованность больше важно, чем индивидуальные решения. Использование средств автоматизации и стандартизация обработки аргументов помогает обеспечить согласованность.


Что бы вы ни делали, ознакомьтесь с параметрами командной строки TAOUP и рассмотрим Стандарты для интерфейсов командной строки . ( Добавлено J F Себастьян - спасибо; Я согласен. )

21
ответ дан 3 December 2019 в 15:35
поделиться

Это полностью произвольно; Команда может реализовать все варианты обработки самостоятельно, или она может позвонить в некоторые другие удобные функции. GetOPT () GetOPT () семейство функций довольно популярно, поэтому большинство программного обеспечения, написанного даже недавно, следует, что следует за конвенциями, установленными этими процедурами. Всегда есть исключения, конечно!

5
ответ дан 3 December 2019 в 15:35
поделиться

Осталось приложения к параметрам анализа, отсюда и несоответствие. Расширение при примере вашего вида все они эквивалентны для Корутиков:

sort -k3
sort --k 3
sort --key 3
sort --key=3
_POSIX2_VERSION=199209 sort +2
1
ответ дан 3 December 2019 в 15:35
поделиться

Команда оболочки - это просто программа, и она может интерпретировать свою командную строку любым удобным для нее способом. В Unix никогда не было ничего подобного полиции интерфейса Apple, чтобы убедиться, что интерфейс командной строки согласован между приложениями. В результате, есть несоответствие, особенно в старых командах.

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

.
1
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

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