Solusi 1:
Saya yakin Anda ingin:
tail -n 10 *-access.log
Mengenai mengapa :
Saya tidak berpikir itu ada hubungannya dengan globbing:
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Saya pikir kebetulan glob Anda berkembang menjadi satu file. Ini mungkin ada hubungannya dengan beberapa parsing opsi kuno yang saya terlalu malas untuk mencoba membaca, tetapi jika Anda benar-benar ingin tahu, lihat di tail.c
di sumber coreutils dan membedah fungsi berikut:
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Solusi 2:
Meski agak tua, pertanyaannya masih relevan. Saya menemui masalah serupa
ssh myserver.com 'tail -2 file-header*'
yang memberi saya kesalahan
ekor:opsi yang digunakan dalam konteks yang tidak valid -- 2
namun, membuntuti hanya satu file, seperti
ssh myserver.com 'tail -2 file-header-file-one'
bekerja dengan baik. Melihat sumber tail.c menunjukkan ekor itu dimulai dengan mengurai usang opsi, lalu uraikan sisanya (yaitu opsi yang belum diproses), opsi reguler. Namun, parse_obsolete_option()
mengharapkan penggunaan "usang", dengan hanya satu file sebagai argumen.
Jadi saat menyediakan lebih banyak file, fungsi segera kembali, dan biarkan parser biasa tersedak -2
(mengharapkan -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;
Kesimpulannya, lebih baik untuk selalu menggunakan -n
bentuk biasa, mengetahui bahwa kode "usang" hanya menerima satu file.