Độ dài tối đa của các đối số dòng lệnh trong gnome-terminal là bao nhiêu?


38

Độ dài tối đa của các đối số dòng lệnh trong gnome-terminal là bao nhiêu?

... và có một biến môi trường hệ thống báo cáo giá trị này không?


Câu trả lời:


32

xargsbiết Trên hệ thống của tôi,

$ 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
Để mở rộng về điều này, giới hạn không nằm trong thiết bị đầu cuối, nó cũng nằm trong kernel (và cả trong shell, nhưng tôi nghĩ giới hạn của shell mặc định (bash) cao bằng giới hạn kernel). Ngoài ra, xargskhông chỉ để báo cáo giới hạn, mà còn (chủ yếu) để làm việc xung quanh nó - xem trang hướng dẫn hoặc tài liệu khác.
Gilles 'SO- ngừng trở nên xấu xa'

1
Tôi thích câu trả lời này, đặc biệt là vì đầu ra "thực sự có thể sử dụng" ... Tôi đã xoay vòng với nó một chút và đưa ra biến thể lệnh này để tách biệt giá trị "thực sự" ... (có thể có một cách đơn giản hơn, nhưng này, nó hoạt động và phù hợp với kịch bản:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

Thật kỳ lạ, xargs dường như tính hai lần giới hạn môi trường trong giới hạn POSIX (giới hạn POSIX = ARG_MAX - 2048 (khoảng không) - envvars).
Tobu

18

Câu trả lời đến từ giá trị sysconfARG_MAX . Để kiểm tra nó trên hệ thống của bạn:

getconf ARG_MAX

Đối với tôi, báo cáo này 2097152. Để biết thêm chi tiết kiểm tra trang web:

man sysconf

Để có được điều này trong một chương trình, ví dụ:

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

1
Cảm ơn KC .. +1; một cách gọn gàng để có được MAX tuyệt đối, nhưng tôi thích phương thức xargs hơn vì yếu tố "thực sự có sẵn" của nó ... vì tôi thực sự sau một giá trị thời gian chạy (nhưng tôi đã không đề cập đến điều đó :(
Peter .O

0

Tôi thực sự không biết về gnome-terminal, nhưng shell không có giới hạn 'cố định', mà là giới hạn của stack.

Tuy nhiên, có một giới hạn mã hóa cho mỗi đối số là 128KB, đó không phải là vấn đề nếu bạn không sử dụng 'đối số rất rất dài ....'.

Bạn có thể đọc thêm về điều này ở đây:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.