Каково различие между единственным тире, и дважды подчеркните штриховой линией флаги на командах оболочки?

У меня была та же проблема, и я разработал его. Ваш вопрос помог мне значительно на самом деле. Петлевое туннелирование было приемом.

Был значительный ASA изменения ОС, особенно относительно NAT, в этих 8,3 выпусках. Это - то, что я выполняю, таким образом, вероятно, что синтаксис не будет работать до 8,3. Я не знаю, могли ли Вы даже сделать это до 8,3.

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

Как Вы, у меня есть ASA между моим граничным маршрутизатором и моей внутренней сетью. У меня только есть один публично адресуемый адрес IPv4. Я смог к трафику протокола 41 NAT между определенным внешним хостом и определенным внутренним узлом с помощью внешнего общедоступного IP-адреса ASA. Туннель завершается на внутреннем узле.

Внутренний узел имеет два интерфейса Ethernet. Один, подключенный к внутренней сети, только IPv4 выполнений. Другой, подключенный к тому же сегменту как внешний интерфейс ASA, только IPv6 выполнений. Существует также туннельный интерфейс для туннеля IPv6. Конфигурация туннеля прибыла непосредственно из Ураганного веб-сайта Electric. Если Вам настроили туннель с ними, они могут показать, что Вы подробно изложили инструкции по конфигурации по крайней мере для 8 различных операционных систем.

ASA использует адрес IPv4 граничного маршрутизатора, поскольку это - маршрут IPv4 по умолчанию. Это использует адрес IPv6 конечной точки туннеля, поскольку это - адрес IPv6 по умолчанию. Внутренние узлы используют ASA в качестве своего маршрута по умолчанию для любой версии, кроме конечной точки туннеля, которая использует ее туннельный интерфейс в качестве значения по умолчанию для IPv6.

Пакеты IPv6 проходят ASA дважды в каждом направлении. Они проходят ASA к конечной точке туннеля, куда они помещаются в туннель, и снова через ASA. И IPv4 и IPv6 извлекают всю пользу брандмауэра ASA.

Реальный прием получал трафик протокола 41 через ASA. Вот части, которые заставили это работать:

object service 6in4
 service 41
object network ipv6_remote_endpoint
 host x.x.x.x
object network ipv6_local_endpoint
 host y.y.y.y

access-list outside_in extended permit object 6in4 object ipv6_remote_endpoint object ipv6_local_endpoint

nat (inside,outside) source static ipv6_local_endpoint interface destination static ipv6_remote_endpoint ipv6_remote_endpoint

Удача с ним!

Ограбить

71
задан 10 May 2012 в 17:27
5 ответов

За одним дефисом может следовать несколько односимвольных флагов. Двойной дефис ставит префикс односимвольного варианта с несколькими символами.

Рассмотрим этот пример:

tar -czf

В этом примере -czf задает три односимвольных флага: c , z и f .

Теперь рассмотрим другой пример:

tar --exclude

В этом случае - exclude задает одиночный, многосимвольный параметр с именем exclude . Двойной дефис устраняет неоднозначность аргумента командной строки, гарантируя, что tar интерпретирует его как exclude , а не как комбинацию e , x , c , l , u , d и e .

112
ответ дан 28 November 2019 в 19:28

Это действительно соглашение. Однако это может помочь синтаксическим анализаторам более эффективно узнать о параметрах, переданных программе. Кроме того, существуют полезные утилиты, которые могут помочь в синтаксическом анализе этих команд, такие как getopt (3) или нестандартная getopt_long (3) для помощи в синтаксическом анализе аргументов программы.

Это хорошо, поскольку мы можем объединить несколько коротких параметров, как говорят другие ответы, например tar -xzf myfile.tar.gz .

Если был аргумент «Лиза» для ls , вероятно, тип ls -lisa будет иметь другое значение, чем ls -lisa . Первые - это параметры l , i , s и a , а не слово.

Фактически, вы могли напишите ls -l -i -s -a , что означает то же самое, что и ls -lisa , но это будет зависеть от программы.

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

7
ответ дан 28 November 2019 в 19:28

Все зависит от программы. Обычно «-» используется для «коротких» параметров (одна буква, -h), а «-» используется для «длинных» (er) параметров (--help).

Короткие параметры обычно можно комбинировать (поэтому «-h -a» то же самое, что «-ha»)

В Unix-подобных системах дефис ASCII – минус обычно используется для указания параметров. За символом обычно следует одна или несколько букв. Аргумент, который представляет собой один дефис - минус сам по себе без каких-либо букв, обычно указывает, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод. Два символа дефиса – минус (-) используются в некоторых программах для указания «длинных параметров», где используются более информативные имена параметров. Это обычная особенность программного обеспечения GNU.

источник

17
ответ дан 28 November 2019 в 19:28

короткие параметры с одним тире и длинные параметры с двойным тире

короткие параметры можно объединить в один аргумент;

for example: ls -lrt #instead of ls -l -r -t

Если мы разрешаем длинные варианты с одним тире, это вызывает двусмысленность. Чтобы решить эту проблему, мы используем двойное тире для длинных опций.

3
ответ дан 28 November 2019 в 19:28

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

 firstscript --firstScriptOption -- --optForSecondProgram
# Parse the command line and set variables to control logic.
parseCommandLine() {
  local additionalOpts exitCode optstring optstringLong
  # Indicate specification for single character options:
  # - 1 colon after an option indicates that an argument is required
  # - 2 colons after an option indicates that an argument is optional, must use -o=argument syntax
  optstring="h"
  # Indicate specification for long options:
  # - 1 colon after an option indicates that an argument is required
  # - 2 colons after an option indicates that an argument is optional, must use --option=argument syntax
  optstringLong="help"
  # Parse the options using getopt command:
  # - the -- is a separator between getopt options and parameters to be parsed
  # - output is simple space-delimited command line
  # - error message will be printed if unrecognized option or missing parameter but status will be 0
  # - if an optional argument is not specified, output will include empty string ''
  GETOPT_OUT=$(getopt --options ${optstring} --longoptions ${optstringLong} -- "$@")
  exitCode=$?
  if [ ${exitCode} -ne 0 ]; then
    # Call a separate function to print usage.
    printUsage
    exit 1
  fi
  # The following constructs the command by concatenating arguments:
  # - the $1, $2, etc. variables are set as if typed on the command line
  # - special cases like --option=value and missing optional arguments are generically handled
  #   as separate parameters so shift can be done below
  eval set -- "${GETOPT_OUT}"
  # Loop over the options:
  # - the error handling will catch cases were argument is missing
  # - shift over the known number of options/arguments
  while true; do
    #echo "Command line option is ${opt}"
    case "$1" in
      -h|--help) # Print usage of this script
        printUsage
        shift
        ;;
      --) # No more arguments - following arguments are passed to the second program.
        shift
        break
        ;;
      *) # Unknown option - will never get here because getopt catches up front
        # and remaining options are after --
        echo "Invalid option $1." >&2
        printUsage
        exit 1
        ;;
    esac
  done
  # Get a list of all command line options that do not correspond to dash options:
  # - These are "non-option" arguments after --
  # - For example, one or more file or folder names that need to be processed.
  # - If multiple values, they will be delimited by spaces.
  # - Command line * will result in expansion to matching files and folders.
  shift $((OPTIND-1))
  additionalOpts=$*
  echo "Additional options: ${additionalOpts}"
  # The additional options would be passed to the second program.
}
0
ответ дан 30 July 2021 в 10:11

Теги

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