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>