Как иметь дело с концом опций — в getopts

Если у Вас есть консольный доступ к VM, затем просто выполненному ifconfig -a на госте. В то время как Вы там, проверьте, чтобы удостовериться, что у гостя действительно есть сетевое соединение и что sshd работает.

Если у Вас нет консольного доступа, то возможности являются IP-адресом, был присвоен DHCP. Ищите другую машину, которая также получает присвоение DHCP, возможно, хост-сервер, и затем добавьте 1 к адресу и попробуйте его. На самом деле попробуйте следующие 5 или 6 адресов. Если это не работает, то Вы или имеете большую активную сеть и должны будете попробовать каждый IP-адрес в подсети, или существует проблема сети нижнего уровня как никакой маршрут для хостинга или два хоста с тем же MAC-адресом. Или возможно Вы просто не добрались sshd выполнение.

Используя консоль самый легкий способ решить эту проблему.

8
15.11.2012, 00:10
2 ответа

Как насчет:

# ... getopts processing ...

[[ $1 = "--" ]] && shift
exeparams=("$@")

Отметьте, необходимо использовать массив для содержания параметров. Это правильно обработает любые аргументы, содержащие пробел. Разыменуйте массив с "${exeparams[@]}"

7
27.01.2020, 20:09
  • 1
    Это предполагает, что нет никаких споров между концом опций и --, т.е. script foo -- bar передал бы foo -- bar к внешней программе. Мой ответ не делает то предположение, поскольку это не было явно указано в вопросе. –  jw013 15.11.2012, 01:05
  • 2
    Кроме того, где OP говорит, что "Я теперь хочу удалить продвижение -" –  glenn jackman 15.11.2012, 01:21
  • 3
    Это было для примера -- -d internalparams. В любом случае мой ответ является достаточно общим для обработки любого случая. спасибо –  jw013 15.11.2012, 01:55

Используйте встроенное shift. Во-первых, сделайте нормальное getopts для Вашего сценария. После того как тот цикл завершается,

shift "$((OPTIND - 1))"

переключит все уже обработанные опции на верхний регистр.

Оттуда, необходимо будет закончить обрабатывать аргументы неопции, если таковые имеются, к первой части сценария (прежде чем --). После того как Вы встречаетесь --, переключите его на верхний регистр до, только последняя часть остается ( -d internalparam часть, которая прибывает после --). Один способ сделать это (использование bash синтаксис):

while [[ $# -gt 0 ]]; do
    # process next argument
    case $1 in
    foo) # process foo
    ;;
    --) shift; break;; # found '--', discard it and exit loop
    *) # handle unrecognized argument
    ;;
    esac
    # not '--', so discard the argument and continue
    shift
done

Наконец, только второй набор опций / аргументы остаются, который можно передать. Не использовать $* передать остающиеся параметры другой команде. Использовать "$@" вместо этого, который сохраняет разделение оригинального слова.

external_command "$@"
13
27.01.2020, 20:09
  • 1
    Да, Спасибо! Но как точно делают я нахожу --? –  highsciguy 15.11.2012, 00:20

Теги

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