Ich schreibe ein Skript, um die Einrichtung neuer Projekte für mich zu automatisieren.Capture-Ausgabe von Git-Befehl?
Dazu gehört das Herunterziehen eines GitHub-Repository.
Was ich tun möchte, ist eine Ausgabe von meinem Skript haben, dann rufen Sie git clone $repo
Ich möchte von diesem Befehl die Ausgabe zeigen, während es läuft, aber dann, wenn es ausgeführt hat, wenn es erfolgreich ausgeführt ersetzen es ist Ausgabe (beachten Sie nur die Git-Befehle Ausgabe, ich möchte immer noch die Ausgabe von vor, um dort zu sein) mit repository successfully cloned
und wenn fehlgeschlagen lassen Sie einfach die Ausgabe dort, und drucken repository cloning failed
.
Wie kann ich das tun?
Unten ist meine aktuelle (eher einfache) Skript.
#! /bin/bash
# -p project name
templateurl="[email protected]: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
Ich habe den unteren Teil des Skripts geändert, um 'git clone $ templateurl $ project --quiet Erfolg = $? wenn [[Erfolg -eq 0]]; dann echo "Repository erfolgreich geklont." fi' Aber ich bekomme den Fehler "[[: nicht gefunden" in der Zeile mit der if-Anweisung. Außerdem denke ich, meine Frage ist etwas missverstanden, ich möchte immer noch die normale Ausgabe anzeigen, während der Befehl läuft, so dass der Benutzer ein Feedback darüber bekommt, was vor sich geht. aber ich möchte diese Ausgabe löschen, sobald der Befehl beendet ist. – Hailwood
In der if-Anweisung fehlt ein $: '[[$ success ...;' Wenn Sie bereits gedruckte Ausgaben löschen wollen, müssen Sie mit Wagenrücklauf (\ r) umgehen und dann die alte Ausgabe überschreiben. Ich nehme an, dass das Löschen bereits gedruckter Ausgaben nicht möglich ist. – sge
Eine andere Möglichkeit wäre die Verwendung von ANSI-Escape-Codes http://ascii-table.com/ansi-escape-sequences.php. zB 'echo -e" \ 033 [2K "' entfernt die aktive Zeile.Eine Kombination aus dem Setzen der Cursorposition und dem Entfernen von Zeilen könnte zum Erfolg führen. – sge