SDB:Příkaz which
Problém
Příkaz, který zadáte v příkazové řádce, se nechová v souladu s dokumentací zobrazenou příkazem man. Potřebujete zjistit, který příkaz se ve skutečnosti spouští.
Postup
V Bashi například zadáte:
$ time -o time.out ls bash: -o: command not found
V manuálové stránce je však volba -o uvedena. Jaký příkaz time se ve skutečnosti spouští? Pomoci může několik příkazů.
Příkaz: type
Příkaz type je tím, co hledáte. Tento příkaz do hledání zahrnuje i aliasy a vestavěné příkazy shellu.
$ type time time is a shell keyword $ type -a time time is a shell keyword time is /usr/bin/time
Další informace o klíčových slovech shellu získáte pomocí vestavěného příkazu help.
$ help time time: time [-p] PIPELINE Execute PIPELINE and print a summary of the real time, user CPU time, and system CPU time spent executing PIPELINE when it terminates. The return status is the return status of PIPELINE. The `-p' option prints the timing summary in a slightly different format. This uses the value of the TIMEFORMAT variable as the output format. times: times Print the accumulated user and system times for processes run from the shell.
Všimněte si, že tento příkaz time nepodporuje volbu -o. Abyste tedy mohli použít verzi, kterou popisuje manuálová stránka, musíte zadat celou cestu k tomuto příkazu.
$ /usr/bin/time -o time.out ls
Příkaz: which
Příkaz which vypíše, ve kterém z adresářů uvedených v proměnné PATH byl příkaz nalezen. Obzvláště zajímavá je volba -a, která vypíše všechny výskyty příkazu na cestě, nejen první z nich. Tento příkaz však nerozpozná aliasy ani vestavěné příkazy shellu.
$ which time /usr/bin/time
Mějte také na paměti, že ve standardní instalaci systému ve verzi 10.2 je příkaz which v souboru /etc/bash.bashrc definován jako funkce shellu a nejedná se tedy o program v adresáři /usr/bin:
$ type -a which which is aliased to `_which' which is /usr/bin/which $ type -a _which _which is a function _which () { local file=$(type -p ${1+"$@"} 2>/dev/null); if test -n "$file" -a -x "$file"; then echo "$file"; return 0; fi; hash -r; type -P ${1+"$@"} }
Odkazy
Daemon Dancing in the Dark blog - Does anybody really know what time it is?
<keyword>bash,shell,which,type</keyword>