Berapa panjang maksimum argumen baris perintah di gnome-terminal?


Jawaban:


32

xargstahu Di sistem saya,

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072

5
Untuk memperluas ini, batasnya tidak di terminal, itu di kernel (dan di shell, juga, tapi saya pikir batas default shell (bash) adalah setinggi batas kernel). Selain itu, xargstidak hanya untuk melaporkan batas, tetapi juga (terutama) untuk mengatasinya - lihat halaman manual atau dokumentasi lainnya.
Gilles 'SANGAT berhenti menjadi jahat'

1
Saya suka jawaban ini, terutama karena output "benar-benar bisa menggunakan" ... Saya sudah sedikit bingung dan muncul dengan varian perintah ini untuk mengisolasi nilai "sebenarnya" ... (mungkin ada cara yang lebih sederhana, tapi hei, ini berfungsi dan cocok untuk sebuah skrip:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

Anehnya, xargs tampaknya menghitung dua kali batas lingkungan dalam batas POSIX (batas POSIX = ARG_MAX - 2048 (ruang kepala) - envvars).
Tobu

18

Jawabannya berasal dari sysconf nilai ARG_MAX. Untuk memeriksanya di sistem Anda:

getconf ARG_MAX

Bagi saya, ini laporan 2097152. Untuk lebih jelasnya periksa halaman manual:

man sysconf

Untuk memasukkan ini ke dalam suatu program, misalnya:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));

1
Terima kasih KC .. +1; cara yang rapi untuk mendapatkan MAX absolut, tapi saya lebih suka metode xargs karena faktor "sebenarnya tersedia" ... karena saya benar-benar setelah nilai run-time (tapi saya tidak menyebutkan bahwa :(
Peter .O

0

Saya tidak benar-benar tahu tentang gnome-terminal, tetapi shell tidak memiliki batas 'tetap', tetapi batas stack.

Namun ada batas hardcode per-argumen yaitu 128KB, yang seharusnya tidak menjadi masalah jika Anda tidak menggunakan 'argumen yang sangat sangat sangat panjang ....'.

Anda dapat membaca lebih lanjut tentang ini di sini:

http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.