Řešení 1:
Věřím, že byste chtěli:
tail -n 10 *-access.log
Pokud jde o proč :
Nemyslím si, že to má nic společného s globbingem:
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Myslím, že se stane, že se váš glob rozšíří do jednoho souboru. Pravděpodobně to má něco společného s některými archaickými možnostmi analýzy, které jsem příliš líný se pokoušet číst, ale pokud to opravdu chcete vědět, podívejte se do tail.c
ve zdroji coreutils a rozeberte následující funkci:
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Řešení 2:
I když je tato otázka trochu stará, stále je aktuální. Setkal jsem se s podobným problémem
ssh myserver.com 'tail -2 file-header*'
to mi zobrazilo chybu
tail:volba použitá v neplatném kontextu -- 2
nicméně tailing pouze jeden soubor, jako
ssh myserver.com 'tail -2 file-header-file-one'
funguje dobře. Podívejte se na zdroj tail.c ukazuje tento ocas začíná analýzou zastaralé možnosti, poté analyzovat zbytek (tj. možnosti ještě nezpracované), běžné možnosti. Nicméně parse_obsolete_option()
očekává "zastaralé" použití s pouze jedním souborem jako argumentem.
Takže při poskytnutí více souborů se funkce okamžitě vrátí a nechá běžný analyzátor, aby se udusil -2
(očekává se -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;
Na závěr je lepší vždy používat -n
běžná forma s vědomím, že "zastaralý" kód přijímá pouze jeden soubor.