저는 자주 반복해야 하는 프로세스를 위한 작은 기능을 만들고 있습니다.
내가 하고 싶은 것은 함수를 매개변수 없이 호출하면 분기가 표시되고 내가 입력한 분기에 프로세스를 만들 수 있게 하고, 매개변수를 사용하여 호출하면 해당 분기에 직접 프로세스를 만드는 것입니다.
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 10
10초의 시간 제한을 지정합니다 . 입력이 제공되지 않으면 스크립트가 종료됩니다.
이 스크립트에 다른 것들이 있다고 가정하면, 그렇지 않으면 함수 호출이 실제로 필요하지 않을 것입니다. 스크립트를 저장하고 실행하여 인수를 전달합니다. 인수가 있는 경우 함수에 인수를 전달합니다.
그리고 저는 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
}
branch
이는 함수에 로컬인 변수를 선언합니다 . 필수는 아니지만 좋은 습관입니다.- 이 테스트(
[[ $1 ]]
)는 설정되지 않았거나 null인 경우 false를 반환합니다$1
. 이는 현재 수행 중인 작업을 보다 간결하게 수행하는 방법입니다.- 여기에도 구문 오류가 있습니다. 공백이 누락되었습니다. 해야한다
[ "$1" -eq "" ]
- 여기에도 구문 오류가 있습니다. 공백이 누락되었습니다. 해야한다
- 변수를 지정할 때 변수 내용( )이 아닌
read
변수 이름( )을 사용합니다 .branch
$branch
- 번호가 매겨진 매개변수보다 명명된 변수를 사용하는 것이 더 좋습니다.
- 인수 배열에 할당해야 하는 경우에는 다음을 사용할 수 있습니다.
set -- arg1 arg2
- 인수 배열에 할당해야 하는 경우에는 다음을 사용할 수 있습니다.
- 이는 반환 값을 직접 테스트합니다.
또한 정말 철저하게 수행하려면 너무 많은 인수가 제공되면 오류가 발생합니다.
if [[ $# -gt 1 ]]; then
echo "${FUNCNAME[0]}: Too many arguments" >&2
return 1
fi
if [[ $1 ]]; then
...