我正在为一个经常需要重复的过程创建一个小功能。
我想要做的是,如果我无参数地调用该函数,它将向我显示分支并允许我将流程转到我输入的分支,如果我使用参数调用它,则直接在此类分支上进行流程
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 ]]
) 将返回 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
...