사용자 입력을 기다립니다

사용자 입력을 기다립니다

저는 자주 반복해야 하는 프로세스를 위한 작은 기능을 만들고 있습니다.

내가 하고 싶은 것은 함수를 매개변수 없이 호출하면 분기가 표시되고 내가 입력한 분기에 프로세스를 만들 수 있게 하고, 매개변수를 사용하여 호출하면 해당 분기에 직접 프로세스를 만드는 것입니다.

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하고 입력 대기 부분에 아무것도 제공되지 않으면 종료할 수 있는지입니다.

답변1

#!/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 1010초의 시간 제한을 지정합니다 . 입력이 제공되지 않으면 스크립트가 종료됩니다.

이 스크립트에 다른 것들이 있다고 가정하면, 그렇지 않으면 함수 호출이 실제로 필요하지 않을 것입니다. 스크립트를 저장하고 실행하여 인수를 전달합니다. 인수가 있는 경우 함수에 인수를 전달합니다.

그리고 저는 git에 대해 잘 알지 못해서 git과 관련된 내용이 엉뚱한 곳에 붙어 있다면 제 잘못입니다.

답변2

(각주 포함) 작성 방법은 다음과 같습니다.

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 ]])는 설정되지 않았거나 null인 경우 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
...

관련 정보