我正在编写一个脚本来自动为我设置新项目.
我想要做的是从我的脚本获得一些输出,然后调用git clone $repo
我想在该命令运行时显示该命令的输出,但是当它运行成功时,如果它已成功运行替换它的输出(请注意git命令输出,我仍然希望之前的输出在那里)和存储库成功克隆,如果失败只是将输出留在那里,打印存储库克隆失败.
我怎样才能做到这一点?
下面是我当前(相当简单)的脚本.
#! /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
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产生的错误.