Używanie wbudowanego polecenia „time” w bash zamiast polecenia zewnętrznego


12

Pracując z timepoleceniem, natknąłem się na sytuację, w której powinienem użyć wbudowanego polecenia timezamiast zewnętrznego polecenia czasu GNU /usr/bin/time. Jak mogę to zrobić? Widziałem gdzieś, że użycie enablei / lub commandpomoże, ale nie zrobiły tego.

To jest przypadek użycia:

watch "time ls"

która korzysta z zewnętrznego /usr/bin/timepolecenia, którego nie chcę! Dzieje się tak, gdy timewywołuje wewnętrzną funkcję bash, kiedy uruchamiam time lsna terminalu, jak poniżej:

$ time ls

Pamiętaj, że odpowiedź na to pytanie jest dokładnie odwrotna:

Istnieje duża różnica w przypadku dwóch poleceń. Wewnętrzne timejest bardziej precyzyjne (co chcę), ale zewnętrzne polecenie ma więcej opcji (których nie potrzebuję).


watch 'bash -c "builtin time ls"'być może?
glenn jackman

1
zobacz tutaj, jak zmusić bash do korzystania z wbudowanych funkcji, zobacz answer2 autorstwa Petr Utzl: builtin timepowinien załatwić sprawę .
Fiximan

2
@Fiximan, timenie jest wbudowany bash, jest zarezerwowanym słowem języka, dzięki czemu możesz time foo | bartime for i in...;done
mierzyć czas potokami

Odpowiedzi:


13

Domyślnie watchuruchamia polecenie, /bin/sh -c '...'więc wyświetlanym wynikiem jest sposób /bin/shinterpretacji timepolecenia. Twój /bin/shnajwyraźniej nie ma wbudowanego time.

Aby uruchomić polecenie z inną powłoką, użyj -xopcji, aby pozbyć się domyślnej, a następnie dodaj własne jawne wywołanie powłoki, której wbudowaną wersję chcesz.

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

Bez względu na sposób uruchamiania watchpolecenie, które oglądasz, nie jest potomkiem powłoki, która je uruchomiła watch, więc ustawienia powłoki nie są bezpośrednio istotne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.