頻繁に繰り返す必要があるプロセス用の小さな関数を作成しています。
私がやりたいのは、関数をパラメータなしで呼び出すと、ブランチが表示され、入力したブランチへのプロセスを作成できるようになり、パラメータ付きで呼び出すと、そのようなブランチで直接プロセスを作成できるようになることです。
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"
10 秒のタイムアウトを指定しますread -t 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
変数を ing する場合は、branch
その内容 ($branch
) ではなく、変数名 ( ) を使用します。- 番号付きパラメータよりも名前付き変数を使用する方が適切です。
- ただし、引数配列に割り当てる必要がある場合は、次のようにします。
set -- arg1 arg2
- ただし、引数配列に割り当てる必要がある場合は、次のようにします。
- これは戻り値を直接テストします。
また、本当に徹底的にしたい場合は、引数が多すぎる場合にエラーをスローします。
if [[ $# -gt 1 ]]; then
echo "${FUNCNAME[0]}: Too many arguments" >&2
return 1
fi
if [[ $1 ]]; then
...