Vous pouvez utiliser le command
shell intégré pour contourner le processus de recherche normal et exécuter la commande donnée en tant que commande externe indépendamment de toute autre possibilité (shell intégré, alias, etc.). Cela se fait souvent dans des scripts qui doivent être portables sur tous les systèmes, bien que probablement plus couramment en utilisant la sténographie \
(comme dans \rm
plutôt que command rm
ou rm
, car en particulier ce dernier peut être aliasé à quelque chose de non connu comme rm -i
).
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ command time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
Cela peut être utilisé avec un alias, comme ceci:
$ alias time='command time'
$ time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
L'avantage de ceci par exemple, alias time=/usr/bin/time
c'est que vous ne spécifiez pas le chemin complet vers le time
binaire, mais que vous retombez plutôt sur le mécanisme de recherche de chemin habituel.
La alias
commande elle-même peut aller par exemple dans ~ / .bashrc ou /etc/bash.bashrc (cette dernière est globale pour tous les utilisateurs du système).
Dans le cas contraire (forcer l'utilisation du shell intégré au cas où un alias est défini), vous utiliseriez quelque chose comme builtin time
, qui outrepasse le processus de recherche habituel et exécute le shell nommé intégré. La page de manuel bash mentionne que cela est souvent utilisé afin de fournir des cd
fonctionnalités personnalisées avec une fonction nommée cd
, qui à son tour utilise le module intégré cd
pour faire la chose réelle.
type -a <cmd>
.command
ne contourne pas les builtins (saufzsh
quand ils n'émulent pas d'autres shells). Il contourne les fonctions et c'est la principale raison de son existence. Son deuxième rôle est de supprimer le spécial dans les buildins spéciaux . Il contourne les alias et les mots clés uniquement parce que ceux-ci ne sont développés qu'en première position (zsh
par exemple, il ne contourne pas les alias globaux). Il n'y a pas detime
bash intégré.time
est un mot-clé que vous pouvez faire par exempletime { foo; bar; }
.command
fonctionne dans ce cas particulier, comme illustré, mais de toute évidence, une bonne réponse vaut mieux qu'une demi-droite.builtin time
ne fonctionne pas.'time' echo test
Il y a un raccourci dans bash pour contourner les mots-clés, sans avoir à spécifier un chemin ou à utiliser un autre module intégré comme
command
: Échapper avec une barre oblique inverse.Personnellement, je trouve cela plus lisible et plus sûr, car c'est possible:
la source
time
fera:ti\me
,'time'
,ti""me
,ti${-##*}me
,${-+time}
... qui dénomme un mot - clé shell.(x_x)
Les solutions générales pour les modules intégrés (par exemple test) sont [1] :
utiliser
env
(tous les coquillages)désactiver la fonction intégrée (uniquement bash et zsh):
utilisez n'importe quelle barre oblique
/
pour appeler la commande (tous les shells):créer un alias (échoue dans un script bash, sauf s'il
shopt -s expand_aliases
est utilisé):Mais le temps n'est pas intégré.
Le mot
time
est un «mot réservé», pas une commande ni un intégré. Qui permettent ces solutions:Citez le mot. Cela ne fonctionne pas avec les intégrés.
De nombreuses formes de citation de travaux:,
\time
"time"
'time'
ti\me
ti"me"
etc.Ceci est utile pour contourner un alias. Même s'il
test
est aliasé,\test
exécutera la commande PATHed (ou le module intégré s'il n'a pas été désactivé).Utilisez la fonction intégrée
command
(cela ne fonctionne pas avec les fonctions intégrées):Comme ci-dessus pour les intégrés, l'utilisation de toutes les barres obliques
/
fonctionne:Comme ci-dessus pour les intégrés, un alias fonctionne également ici:
[1] Supposons qu'il existe un exécutable externe
~/bin/test
qui imprime "test externe". Et plus loin: supposons que ce~/bin
soit en avance/bin
dans le PATH actif.la source
Déposez ceci dans votre
~/.bashrc
:alias time=/usr/bin/time
la source
Vous pouvez utiliser la
enable
commande pour désactiver certains éléments intégrés.Cependant,
time
c'est un mot clé, donc cela ne fonctionnera pas.Il vous reste donc à créer un alias pour le remplacer:
la source