Soluzione 1:
Credo che vorresti:
tail -n 10 *-access.log
Quanto al perché :
Non penso che abbia nulla a che fare con il globbing:
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Penso che accada che il tuo glob si espanda in un file. Probabilmente ha qualcosa a che fare con alcune opzioni arcaiche di parsing che sono troppo pigro per provare a leggere, ma se vuoi davvero saperlo vai a cercare in tail.c
nel sorgente coreutils e analizza la seguente funzione:
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Soluzione 2:
Anche se un po' vecchia, la domanda è ancora rilevante. Ho riscontrato un problema simile
ssh myserver.com 'tail -2 file-header*'
che mi ha dato l'errore
tail:opzione utilizzata in un contesto non valido -- 2
tuttavia, coda solo un file, come
ssh myserver.com 'tail -2 file-header-file-one'
funziona bene. Guardando la fonte tail.c mostra quella coda inizia con l'analisi di obsoleto opzioni, quindi analizza il resto (ovvero opzioni non ancora elaborate), opzioni regolari. Tuttavia, parse_obsolete_option()
prevede un utilizzo "obsoleto", con un solo file come argomento.
Quindi, quando si forniscono più file, la funzione ritorna immediatamente e consente al normale parser di soffocare su -2
(previsto -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;
In conclusione, è meglio usare sempre il -n
forma regolare, sapendo che il codice "obsoleto" accetta solo un file.