Mam następujące elementy w Bash (w systemie Linux)
for dir in Movies/*
do
(cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done
Ale chciałbym, aby to "echo" pokazywało następujące echo w następnej linii (nie łączy się z ostatnim wyjściem echa, ale zamienia je), aby wyglądało na aktualizację. Podobnie jak pasek postępu z procentami wyświetlałby się w tym samym wierszu.
printf a; printf b
wyjściaab
---printf a\\r; printf b
wyjściab
---printf a\\r; sleep 1; printf b
wyjściaa
, a następnieb
Jeśli dobrze zrozumiałem, możesz go uzyskać, zastępując echo następującym wierszem:
Oto mały przykład, który możesz uruchomić, aby zrozumieć jego zachowanie:
źródło
K
nie jest to konieczne i faktycznie zostaje wyrzucone jako litera K.Reszta odpowiedzi jest całkiem dobra, ale chciałem tylko dodać dodatkowe informacje na wypadek, gdyby ktoś przyszedł tutaj, szukając rozwiązania zastępującego / aktualizującego echo wielowierszowe.
Chciałbym więc podzielić się z wami przykładem. Poniższy skrypt został wypróbowany w systemie CentOS i używa polecenia „timedatectl”, które zasadniczo drukuje szczegółowe informacje o czasie w systemie.
Zdecydowałem się użyć tego polecenia, ponieważ jego wyjście zawiera wiele wierszy i działa idealnie w poniższym przykładzie:
Powyższe wypisze wynik „
timedatectl
” na zawsze i zastąpi poprzednie echo zaktualizowanymi wynikami.Muszę wspomnieć, że ten kod to tylko przykład, ale może nie jest dla Ciebie najlepszym rozwiązaniem w zależności od Twoich potrzeb. Podobnym poleceniem, które zrobiłoby prawie to samo (przynajmniej wizualnie), jest „
watch -n 3 timedatectl
”.Ale to inna historia. :)
Mam nadzieję, że to pomoże!
źródło
Jest to bardzo przydatne, wypróbuj je i zmień w razie potrzeby.
źródło
Możesz spróbować… Moja własna wersja…
źródło
Mój ulubiony sposób to zrobić sen do 50. Tutaj
i
zmienna musi być używana w instrukcjach echo.źródło