Я создаю небольшую функцию для процесса, который я часто повторяю.
Что бы я хотел сделать, так это то, что если я вызову функцию без параметров, она покажет мне ветви и разрешит мне чтобы сделать процесс веткой, в которую я ввел, и если я вызываю ее с параметром, чтобы сделать процесс на такой ветке напрямую
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 входное значение, и также выйти, если ничего не указано в части ожидания входа
#!/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 застряло в неправильном месте, хорошо, что я плохой.
Вот как я написал бы это (со сносками):
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 не задано или null. Это более сжатый способ делать то, что вы делаете. У вас также была синтаксическая ошибка здесь - пропущен пробел. Должно быть [ "$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
...
#!/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 застряло в неправильном месте, хорошо, что я плохой.
Вот как я написал бы это (со сносками):
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 не задано или null. Это более сжатый способ делать то, что вы делаете. У вас также была синтаксическая ошибка здесь - пропущен пробел. Должно быть [ "$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
...