Solution 1 :
Je pense que vous voudriez :
tail -n 10 *-access.log
Quant à pourquoi :
Je ne pense pas que cela ait quelque chose à voir avec le globbing :
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Je pense qu'il se trouve que votre glob se développe en un seul fichier. Cela a probablement quelque chose à voir avec certaines options archaïques d'analyse que je suis trop paresseux pour essayer de lire, mais si vous voulez vraiment savoir, regardez dans tail.c
dans le source coreutils et décortiquez la fonction suivante :
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Solution 2 :
Bien qu'un peu ancienne, la question est toujours d'actualité. J'ai rencontré un problème similaire
ssh myserver.com 'tail -2 file-header*'
qui m'a donné l'erreur
tail :option utilisée dans un contexte invalide -- 2
cependant, suivre un seul fichier, comme
ssh myserver.com 'tail -2 file-header-file-one'
fonctionne bien. En regardant la source tail.c montre que queue commence par analyser obsolète options, puis analysez le reste (c'est-à-dire les options non encore traitées), les options normales. Cependant, parse_obsolete_option()
attend une utilisation "obsolète", avec un seul fichier en argument.
Ainsi, lorsque vous fournissez plus de fichiers, la fonction revient immédiatement et laisse l'analyseur normal s'étouffer avec -2
(en attendant -n 2
).
/* With the obsolete form, there is one option string and at most
one file argument. Watch out for "-" and "--", though. */
if (! (argc == 2
|| (argc == 3 && ! (argv[2][0] == '-' && argv[2][1]))
|| (3 <= argc && argc <= 4 && STREQ (argv[2], "--"))))
return false;
En conclusion, il vaut mieux toujours utiliser le -n
forme régulière, sachant que le code "obsolète" n'accepte qu'un seul fichier.