ความยาวสูงสุดของอาร์กิวเมนต์บรรทัดคำสั่งใน gnome-terminal คืออะไร?


38

ความยาวสูงสุดของอาร์กิวเมนต์บรรทัดคำสั่งใน gnome-terminal คืออะไร?

... และมีตัวแปรสภาพแวดล้อมของระบบซึ่งรายงานค่านี้หรือไม่


คำตอบ:


32

xargsรู้ ในระบบของฉัน

$ 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
ในการขยายตัวนี้ขีด จำกัด ไม่ได้อยู่ในเทอร์มินัลมันอยู่ในเคอร์เนล (และในเชลล์เช่นกัน แต่ฉันคิดว่าขีด จำกัด เริ่มต้นของเชลล์ (ทุบตี) นั้นสูงเท่ากับขีด จำกัด เคอร์เนล) นอกจากนี้xargsไม่ได้มีไว้สำหรับรายงานการ จำกัด เท่านั้น (สำหรับการแก้ไข) - ดูที่หน้าคนหรือเอกสารอื่น ๆ
Gilles 'หยุดความชั่วร้าย'

1
ฉันชอบคำตอบนี้โดยเฉพาะอย่างยิ่งเพราะ "สามารถใช้งานได้จริง" เอาท์พุท ... ฉันได้ทวีคูณมันขึ้นมาพร้อมกับตัวแปรคำสั่งนี้เพื่อแยกค่า "จริง ๆ " ... (อาจมีวิธีที่ง่ายกว่า แต่เดี๋ยวก่อนทำงานและเหมาะสำหรับสคริปต์:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

น่าแปลกที่ xargs ดูเหมือนจะนับสองเท่าของขีด จำกัด สภาพแวดล้อมในขีด จำกัด POSIX (POSIX limit = ARG_MAX - 2048 (headroom) - envvars)
Tobu

18

คำตอบที่มาจากsysconfARG_MAXค่า วิธีตรวจสอบในระบบของคุณ:

getconf ARG_MAX

สำหรับฉันรายงาน2097152นี้ สำหรับรายละเอียดเพิ่มเติมตรวจสอบ manpage:

man sysconf

ในการรับสิ่งนี้ภายในโปรแกรมเช่น:

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

1
ขอบคุณ KC .. +1; วิธีที่เรียบร้อยในการรับค่า MAX สูงสุด แต่ฉันชอบวิธี xargs เนื่องจากมีปัจจัย "ใช้งานได้จริง" ... เนื่องจากฉันเป็นจริงหลังจากค่าใช้เวลาทำงาน (แต่ฉันไม่ได้พูดถึงสิ่งนั้น :(
ปีเตอร์ .O

0

ฉันไม่รู้เกี่ยวกับคำสั่ง gnome-terminal จริงๆ แต่เปลือกไม่มีขีด จำกัด 'คงที่' แต่ขีด จำกัด ของสแต็ก

อย่างไรก็ตามมีขีด จำกัด ฮาร์ดโค้ดต่อการโต้แย้งที่ 128KB ซึ่งไม่น่าจะมีปัญหาหากคุณไม่ใช้ 'อาร์กิวเมนต์ที่ยาวมากมาก .... '

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่นี่:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.