10

新しいプロジェクトの設定を自動化するスクリプトを書いています。

これには、githubリポジトリのプルダウンが含まれます。

私がやりたいのは、スクリプトから出力を取得してから、git clone $repo

実行中にそのコマンドからの出力を表示したいのですが、実行に成功した場合は、その出力を置き換えます(gitコマンドの出力だけに注意してください。それ以前の出力はそのままにしておきます)repository successfully cloned。失敗した場合は、出力をそのままにして、印刷しますrepository cloning failed

これどうやってするの?

以下は私の現在の(かなり単純な)スクリプトです。

#! /bin/bash

# -p project name

templateurl="git@bitbucket.org:xxx/xxx-site-template.git"

while getopts ":p:" opt; do #eventually I'll add more options here

case $opt in
  p)
    project=$OPTARG
    ;;
  \?)
    echo "Invalid option: -$OPTARG" >&2
    exit 1
    ;;
  :)
    echo "Option -$OPTARG requires an argument." >&2
    exit 1
    ;;
esac
done

if [ -z "$project" ]; then
    echo "Project name required"
    exit 1
fi

clear
echo "|==========================|"
echo "| New xxx Project Creator  |"
echo "|==========================|"
echo "Project: $project"

if [ -d "$project" ]; then
    echo "Directory $project already exists!"
    exit 1
fi


mkdir $project
if [ ! -d "$project" ]; then
    echo "Failed to create project directory!"
    exit 1
fi

echo "Cloning xxx Template repository"
git clone $templateurl $project
4

2 に答える 2

15

git clone$? で読み取ることができる終了コードを提供しますか? 次のように:

git clone user@server:repo
echo $?

すべてが正常に機能した場合、これは 0 を出力します。たとえば、フォルダーが git リポジトリーでない場合、終了コード 128 が返されます。

クローンが次のように機能したかどうかを確認できます。

git clone user@server:repo localrepo --quiet
success=$?
if [[ $success -eq 0 ]];
then
    echo "Repository successfully cloned."
else
    echo "Something went wrong!"
fi

--quietエラーがない限り、git からの出力を抑制します。したがって、else-branch を削除するだけで、正の出力または git によって生成されるエラーが得られます。

于 2012-12-05T02:34:05.543 に答える
5
git clone user@server:repo localrepo > git.log 2>&1
if [[ $? eq 0 ]];
then
   echo Repository successfully cloned.
else
   cat git.log
   echo Repository cloning failed.
fi

rm git.log

説明:

git clone user@server:repo localrepo > git.log 2>&1 stdout および stderr ストリームを git.log にリダイレクトします。 > git.logstdout を git.log に 2>&1リダイレクトします stderr を stdout と同じ場所 (したがって、git.log) にリダイレクトします。

$? eq 0 クローンが成功した場合は 0 になるはずの git の retcode をチェックします。

cat git.loggit.log ファイルの内容を出力します。

于 2012-12-05T02:36:22.670 に答える