Я хочу позвонить/bin/sh и использовать параметр -c для передачи команды '+ x' , т. е. выполнить программу с именем «+ x», имя которой начинается со знака «плюс».Обработка аргументов '-' в аргументах/bin/sh: POSIX против реализаций с помощью Bash/Dash/FreeBSD sh
Поскольку «+ x» интерпретируется как/bin/sh как опция (в частности, отключить опцию «x»),/bin/sh следует запретить интерпретировать его как опцию. Я получаю следующие различные результаты в зависимости от/bin/ш я использую:
(1) Первый вариант:
/bin/sh -c -- +x
Использование тире и Баш на Linux: Команда + х выполняется.
Использование команды FreeBSD sh: выполняется команда - и задана опция + x.
(2) Второй вариант:
/bin/sh -c +x
Использование тире и Баш на Linux: + х опция установлена, и есть ошибка, потому что опция -c отсутствует аргумент.
Использование команды FreeBSD sh: выполняется команда + x.
(3) Третий вариант:
/bin/sh -c - +x
Использование тире и Bash на Linux: + X выполняется.
Использование команды FreeBSD sh: выполняется команда - и устанавливается опция + x.
(4) Четвертый вариант: (ДОБАВЛЕНО как предложено в комментариях)
/bin/sh -c+x
Использование тире и Баш на Linux: Invalid/Illegal опцию '+'
Использование ш в FreeBSD: Bad -c опцион
Мой вопрос: что предлагает POSIX?
Я читаю спецификации POSIX для ш здесь: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
Цитирование из него: «. Один дефис должен рассматриваться в качестве первого операнда, а затем игнорируется Если оба„-“и„-“являются заданные в качестве аргументов, или если другие операнды предшествуют одному дефису, результаты не определены ».
Я не уверен, относится ли эта цитата к одной тире, помещенной сразу после '-c'.
Итак, какой из них справа, Dash/Bash или FreeBSD? Или, если оба правильные, потому что POSIX позволяет обоим, как сделать это переносимо?
Для Хорошая мера: что делает '/ bin/sh -c + x'? –
@bishop Я так не думаю. '/ bin/sh' будет просто видеть аргументы' -c' и '+ x', поэтому' getopt() 'следует рассматривать как'/bin/sh -c + x'. –
Ссылка на POSIX для 'sh' находится здесь: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html –