Lösung 1:
Ich glaube, Sie möchten:
tail -n 10 *-access.log
Zum warum :
Ich glaube nicht, dass es etwas mit Globbing zu tun hat:
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Ich denke, es passiert einfach so, dass Ihr Glob zu einer Datei erweitert wird. Es hat wahrscheinlich etwas mit einigen archaischen Parsing-Optionen zu tun, die ich zu faul bin, um sie zu lesen, aber wenn Sie es wirklich wissen wollen, schauen Sie in tail.c
nach in der Coreutils-Quelle und sezieren Sie die folgende Funktion:
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Lösung 2:
Die Frage ist zwar schon etwas älter, aber immer noch aktuell. Ich bin auf ein ähnliches Problem gestoßen
ssh myserver.com 'tail -2 file-header*'
das gab mir den Fehler
tail:Option in ungültigem Kontext verwendet -- 2
jedoch Tailing nur eine Datei, wie
ssh myserver.com 'tail -2 file-header-file-one'
funktioniert gut. Betrachten Sie die Quelle tail.c zeigt diesen Schwanz beginnt mit dem Parsen von veraltet Optionen, dann analysieren Sie den Rest (d.h. noch nicht verarbeitete Optionen), reguläre Optionen. Jedoch parse_obsolete_option()
erwartet eine "veraltete" Verwendung, mit nur einer Datei als Argument.
Wenn also mehr Dateien bereitgestellt werden, kehrt die Funktion sofort zurück und lässt den regulären Parser an -2
ersticken (erwartet -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;
Zusammenfassend ist es besser, immer den -n
zu verwenden reguläre Form, wohl wissend, dass der "veraltete" Code nur eine Datei akzeptiert.