Pracując z time
poleceniem, natknąłem się na sytuację, w której powinienem użyć wbudowanego polecenia time
zamiast zewnętrznego polecenia czasu GNU /usr/bin/time
. Jak mogę to zrobić? Widziałem gdzieś, że użycie enable
i / lub command
pomoże, ale nie zrobiły tego.
To jest przypadek użycia:
watch "time ls"
która korzysta z zewnętrznego /usr/bin/time
polecenia, którego nie chcę! Dzieje się tak, gdy time
wywołuje wewnętrzną funkcję bash, kiedy uruchamiam time ls
na 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 time
jest 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?builtin time
powinien załatwić sprawę .time
nie jest wbudowanybash
, jest zarezerwowanym słowem języka, dzięki czemu możesztime foo | bar
time for i in...;done
Odpowiedzi:
Domyślnie
watch
uruchamia polecenie,/bin/sh -c '...'
więc wyświetlanym wynikiem jest sposób/bin/sh
interpretacjitime
polecenia. Twój/bin/sh
najwyraźniej nie ma wbudowanegotime
.Aby uruchomić polecenie z inną powłoką, użyj
-x
opcji, aby pozbyć się domyślnej, a następnie dodaj własne jawne wywołanie powłoki, której wbudowaną wersję chcesz.Bez względu na sposób uruchamiania
watch
polecenie, które oglądasz, nie jest potomkiem powłoki, która je uruchomiławatch
, więc ustawienia powłoki nie są bezpośrednio istotne.źródło