Ожидайте ввода данных пользователем

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

То, что я хотел бы сделать, - то, что, если я вызываю функцию, без параметров, она покажет мне ответвления и позволит мне делать процесс к ответвлению, которое я ввел, и если я называю ее с параметром для создания процесса на таком ответвлении непосредственно

function 3bra(){
  #If there's no parameter
  if ["$1" -eq ""]; then
    #show me the branches
    git branch
    #wait for input and give the parameter such entered value
    read $1
  fi

  #checkout to the parameter branch
  git checkout "$1"

  if [ $? -eq 0 ]; then
    #if there are no errors, complete the checkout process
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}

Мой вопрос состоит в том, как я могу дать $1 входное значение, и также выходит, если ничто не дано во входе, ожидают часть

0
задан 12 March 2018 в 14:12

2 ответа

#!/bin/bash
branch=""
function 3bra(){
  #If there's no paramether
  if [[ -z "$*" ]]; then
    #show me the branches
    git branch
    #wait for input and give the paramether such entered value
    echo "Which branch?"
    read -t 10 branch || exit
  else
    #Stuff to do if 3bra is called with params...
    branch="$1"
  fi
  #checkout to the paramether branch
  git checkout "$branch"
  if [[ "$?" -eq 0 ]]; then
    #if there are no errors, complete the checkout process
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}
#Call the function and pass in the parameters.
3bra "$1"

read -t 10 указывает тайм-аут 10 секунд. Если никакой вход не обеспечивается, выходы сценария.

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

Кроме того, я не знаком с мерзавцем, поэтому если что-то мерзавец releated застревает в неправильном месте, хорошо мое плохое.

1
ответ дан 30 October 2019 в 06:56

Вот то, как я записал бы это (со сносками):

function 3bra(){
  local branch  # (1)

  if [[ $1 ]]; then  # (2)
    branch="$1"
  else
    # Show branches.
    git branch
    # Get branch from user.
    read branch  # (3, 4)
  fi

  # Checkout the given branch.
  if git checkout "$branch"; then  # (5)
    # Complete the checkout process.
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}
  1. Это объявляет переменную branch локальный для функции. Это не требуется, но это - хорошая привычка.
  2. Этот тест ([[ $1 ]]) возвратит false если $1 сброшен или пустой указатель. Это - более сжатый способ сделать то, что Вы делали.
    • Ваш также имел синтаксическую ошибку здесь - недостающий пробел. Должен быть [ "$1" -eq "" ]
  3. Когда readлуг переменная, Вы используете имя переменной (branch), не его содержание ($branch).
  4. Лучше использовать именованную переменную, чем пронумерованный параметр.
    • Хотя, если действительно необходимо присвоить массиву аргументов, можно использовать set -- arg1 arg2
  5. Это тестирует возвращаемое значение непосредственно.

Также, если Вы хотите быть действительно полными, бросить ошибку, если слишком много аргументов обеспечиваются:

if [[ $# -gt 1 ]]; then
  echo "${FUNCNAME[0]}: Too many arguments" >&2
  return 1
fi

if [[ $1 ]]; then
...
0
ответ дан 30 October 2019 в 06:56

Другие вопросы по тегам:

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