To może być pytanie początkującego, ale nie rozumiem, jak to jest skonfigurowane i dlaczego format wyjściowy time
polecenia jest inny w tych dwóch przypadkach:
jeśli jest używany przez time
, dane wyjściowe to trzy wiersze z podstawowymi informacjami
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
wtedy mogę sprawdzić, który plik binarny jest używany
$ which time
/usr/bin/time
i wywołuj go bezpośrednio, aby uzyskać dane wyjściowe w zupełnie innym formacie, ze znacznie więcej informacji
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
nie ma żadnych aliasów związanych z time
$ alias | grep time
$
Biegnę Ubuntu 16.04
.
which
jest w zasadzie bezużyteczny ...Odpowiedzi:
Pierwszy to
bash
własne słowo kluczowetime
(skompilowane zbash
), a drugi to zewnętrzny plik wykonywalnytime
(/usr/bin/time
zawieratime
pakietem).Nie
which
można też wyświetlać wbudowanych poleceń powłoki ani słów kluczowych podczas ich wyszukiwaniaPATH
, należy do tego użyćtype
. Będąc wbudowaną powłoką,type
może dodatkowo sprawdzać wewnętrzne jednostki powłoki (a takżePATH
), dzięki czemu można dostrzec różnicę poprzez:Tutaj:
Pierwszy zostanie wykonany, jeśli po prostu użyjesz
time
. Możesz także uzyskać, który jest wykonywany, używająctype
(bez-a
):-a
Mówitype
szukać w jednostkach wewnętrznych powłoce przez, a także wPATH
tj szukać we wszystkich możliwych źródeł.Jeśli z jakiegoś powodu potrzebujesz zewnętrznego, użyj jednego z:
źródło
which
nie rozważa wbudowanych? I zawsze powinienemtype -a
najpierw sprawdzić . Rzeczywiście, wydaje się,type
jest lepszawhich
, ponieważ wyświetla lokalizację/usr/bin/time
, a takżewhich
przydatne?type
jest rzeczywiście lepszy - jeśli używasz bash. Inna powłoka może nie mieć wbudowanejtype
lubtime
wbudowanej wersji.time
być zewnętrznym, ale nietype
,type
jest dostępny we wszystkich powłokach zgodnych z POSIX.Inną różnicą między wbudowanym a zewnętrznym narzędziem jest to, że wbudowane Bash
time
będzie w stanie dokończyć tworzenie potoków lub wywoływać funkcje powłoki (podobno nawet pętle, ale instrukcja nie wydaje się tego obiecać). Zewnętrznetime
nie może, ponieważ będąc poza powłoką, nie wie o otaczającym kodzie.Chociaż czas jest określony w standardzie, nie jest określone, jak powinien działać w potoku, więc możliwe jest bardziej wydajne wdrożenie wewnętrzne, takie jak to.
źródło