Подождите, пока пользовательский ввод

Я создаю небольшую функцию для процесса, который я часто повторяю.

Что бы я хотел сделать, так это то, что если я вызову функцию без параметров, она покажет мне ветви и разрешит мне чтобы сделать процесс веткой, в которую я ввел, и если я вызываю ее с параметром, чтобы сделать процесс на такой ветке напрямую

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 входное значение, и также выйти, если ничего не указано в части ожидания входа

0
задан 13 March 2018 в 01:12

4 ответа

#!/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 застряло в неправильном месте, хорошо, что я плохой.

0
ответ дан 17 July 2018 в 19:00

Вот как я написал бы это (со сносками):

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 ...
0
ответ дан 17 July 2018 в 19:00
#!/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 застряло в неправильном месте, хорошо, что я плохой.

0
ответ дан 23 July 2018 в 19:47
  • 1
    Все, что связано с Git, выглядит прекрасно. Вам не нужно объявлять переменную branch перед ее использованием, но если вы это сделаете, она должна быть локальной для функции (т. Е. Использовать функцию local branch внутри функции). – wjandrea 13 March 2018 в 03:55

Вот как я написал бы это (со сносками):

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 ...
0
ответ дан 23 July 2018 в 19:47

Другие вопросы по тегам:

Похожие вопросы: