Как запустить серию команд с помощью одной команды в командной строке? - PullRequest
2 голосов
/ 18 января 2012

Обычно я запускаю следующие команды для развертывания определенного приложения:

compass compile -e production --force
git add .
git commit -m "Some message"
git push
git push production master

Как мне обернуть это в одну команду?

Мне нужно было бы иметь возможность настроить сообщение коммита. Таким образом, команда может выглядеть примерно так:

deploy -m "Some message"

Ответы [ 7 ]

5 голосов
/ 18 января 2012

Есть две возможности:

  • скрипт, как ответили другие

  • функция, определенная в вашем .bash_profile:

    deploy() {
        compass compile -e production --force &&
        git add . &&
        git commit -m "$@" &&
        git push &&
        git push production master
    }
    

Без аргументов у вас будет третий вариант, а именно псевдоним:

alias deploy="compass compile -e production --force &&
              git add . &&
              git commit -m 'Dumb message' &&
              git push &&
              git push production master"
2 голосов
/ 18 января 2012

Вы можете создать функцию, которая будет делать то, что вы хотите, и передать сообщение о коммите в качестве аргумента:

function deploy() {
    compass compile -e production --force
    git add .
    git commit "$@"
    git push
    git push production master
}

Поместите это в ваш .bashrc и все готово.

1 голос
/ 18 января 2012

Вы можете сделать скрипт оболочки. Что-то похожее на это (не проверяйте ввод и т. Д.):

#!/bin/sh
compass compile -e production --force
git add .
git commit -m $1
git push
git push production master

Сохраните это в myscript.sh, chmod +x, затем сделайте что-то вроде ./myscript.sh "Some message".

0 голосов
/ 18 января 2012

Я бы приложил усилия, чтобы заставить команду работать не только для текущего каталога.Один из самых простых способов сделать это - использовать getopt в BASH-скрипте.Убедитесь, что у вас установлен getopt, создайте deploy.sh, затем chmod 755 deploy.sh, а затем сделайте что-то вроде этого:

#!/bin/bash

declare -r GETOPT=/usr/bin/getopt
declare -r ECHO='builtin echo'
declare -r COMPASS=/path/to/compass
declare -r GIT=/path/to/git


sanity() {
    # Sanity check our runtime environment to make sure all needed apps are there.
    for bin in $GETOPT $ECHO $COMPASS $GIT
    do
        if [ ! -x $bin ]
        then
            log error "Cannot find binary $bin"
            return 1
        fi
    done

    return 0
}

usage() {
$CAT <<! 

${SCRIPTNAME}:  Compile, add and commit directories

Usage: ${SCRIPTNAME} -e <env> [-v]
    -p|--path=<path to add>
    -c|--comment="Comment to add"
    -e|--environment=<production|staging|dev>

Example:
    $SCRIPTNAME -p /opt/test/env -c "This is the comment" -e production

!
}



checkopt() {

# Since getopt is used within this function, it must be called as

# checkopt "$@"
    local SHORTOPT="-hp::c::e::"
    local LONGOPT="help,path::,comment::,environment::"

eval set -- "`$GETOPT -u -o $SHORTOPT --long $LONGOPT -n $SCRIPTNAME -- $@`"
    while true
    do
        case "$1" in
        -h|--help)
            return 1
            ;;
        -|--path)
            PATH="$2"
            shift 2
            ;;
        -c|--comment)
            COMMENT=$2
            shift 2
            ;;
        -e|--environment)
            ENV="$2"
            shift 2
            ;;
        --)
            shift
            break
            ;;
        *)
            $ECHO "what is $1?"
            ;;
        esac
    done
}


if ! sanity
then
    die "Sanity check failed - Cant find proper system binaries"
fi


if checkopt $@
then
    $ECHO "Running Compass Compile & Git commit sequence..."
    $COMPASS compile -e $ENV --force
    $GIT add $PATH
    $GIT commit -m $COMMENT
    $GIT push
    $GIT push ENV master

else
    usage
    exit 1
fi

exit 0
0 голосов
/ 18 января 2012

все упоминают о написании скрипта, и это, вероятно, лучший способ сделать это.

Однако вы можете когда-нибудь захотеть использовать другой способ - объединить команды с &&, например:

cd ../ && touch abc

создаст файл "abc" в родительском каталоге :)

Это просто, чтобы сообщить вам о таких вещах, для данного конкретного сценария (и 99% других), пожалуйста, посмотрите надругие ответы:)

0 голосов
/ 18 января 2012

вы можете записать эти команды в файл с именем deploy.sh.

Затем сделайте его исполняемым и запустите как sh deploy.sh

Вы даже можете добавить его в свой путь, экспортировав путь, в котором вы сохранили скрипт.

0 голосов
/ 18 января 2012

Вы можете написать сценарий оболочки для этого

#!/bin/bash
compass compile -e production --force 
git add . 
git commit -m $1 
git push 
git push production master

Сохраните это в 'deploy' и выполните команду chmod 7xx. Теперь вы можете использовать его как ./deploy "Some message"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...