Piszę skrypt, aby zautomatyzować tworzenie nowych projektów dla mnie.Przechwytywanie danych wyjściowych z polecenia git?
obejmuje to ściągnięcie repozytorium github.
Co chcę zrobić, to mieć jakieś wyjście z mojego skryptu, a następnie zadzwonić git clone $repo
chcę pokazać wyjście z tego polecenia, gdy jest uruchomiony, ale wtedy, gdy prowadzi, jeśli prowadzi z powodzeniem zastąpić to jest wyjście (zwróć uwagę tylko na polecenia polecenia git, nadal chcę, aby dane wyjściowe przed nim były) z repository successfully cloned
, a jeśli się to nie uda, zostaw to wyjście i wydrukuj repository cloning failed
.
Jak mogę to zrobić?
Poniżej znajduje się mój obecny (raczej prosty) skrypt.
#! /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
Zmieniono dolną część skryptu na "git clone $ templateurl $ project --quiet success = $? , jeśli [[success -quq 0]]; następnie echo "Repozytorium pomyślnie sklonowane." fi' Ale pojawia się błąd '[[: not found' w wierszu z instrukcją if. także, myślę, że moje pytanie jest nieco niedopowiedziane, nadal chcę wyświetlać normalny wynik, ponieważ polecenie jest uruchomione, więc użytkownik otrzymuje pewne informacje zwrotne na temat tego, co się dzieje. ale chcę usunąć ten wynik po zakończeniu polecenia. – Hailwood
W instrukcji if jest $ brak: '[[$ success ...;' Jeśli chcesz usunąć już wydrukowane dane wyjściowe, będziesz musiał postępować z powrotem karetki (\ r), a następnie nadpisać stare dane wyjściowe. Zakładam, że usunięcie już wydrukowanych danych nie jest możliwe. – sge
Inną możliwością byłoby użycie ANSI-Escape-Codes http://ascii-table.com/ansi-escape-sequences.php. np. 'echo -e" \ 033 [2K "' usuwa aktywną linię.Połączenie ustawienia pozycji kursora i usunięcia linii może doprowadzić do sukcesu. – sge