কোন কমান্ড একক আর্গুমেন্ট জন্য সর্বোচ্চ আকার সংজ্ঞায়িত?


48

আমি এইরকম যে একটি একক যুক্তি সর্বাধিক দৈর্ঘ্য না এখানে সমস্যা এত প্লাস সামগ্রিক যুক্তি অ্যারের মোট আকার পরিবেশ, যা সীমাবদ্ধ আয়তন ছিল অধীন ছিল ARG_MAX। সুতরাং আমি ভেবেছিলাম যে নিম্নলিখিতগুলির মতো কিছু সফল হবে:

env_size=$(cat /proc/$$/environ | wc -c)
(( arg_size = $(getconf ARG_MAX) - $env_size - 100 ))
/bin/echo $(tr -dc [:alnum:] </dev/urandom | head -c $arg_size) >/dev/null

সঙ্গে - 100শেল এবং পরিবেশ আকার মধ্যে পার্থক্য জন্য অ্যাকাউন্টে চেয়ে বেশি যথেষ্ট হচ্ছে echoপ্রক্রিয়া। পরিবর্তে আমি ত্রুটি পেয়েছি:

bash: /bin/echo: Argument list too long

কিছুক্ষণ ঘোরাঘুরি করার পরে, আমি দেখতে পেলাম যে সর্বাধিকটি হ'ল আকারের পূর্ণ হেক্স অর্ডার ছিল:

/bin/echo \
  $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) \
  >/dev/null

বিয়োগটি সরানো হলে ত্রুটি ফিরে আসে। আপাতদৃষ্টিতে একটি একক আর্গুমেন্টের সর্বাধিক হ'ল ARG_MAX/16এবং -1আর্গুমেন্ট অ্যারেতে স্ট্রিংয়ের শেষে নাল বাইটের অ্যাকাউন্টগুলি।

আর একটি বিষয় হ'ল যুক্তিটি পুনরাবৃত্তি করা হলে আর্গুমেন্ট অ্যারের মোট আকার আরও কাছাকাছি হতে পারে ARG_MAXতবে এখনও সেখানে যথেষ্ট নয়:

args=( $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) )
for x in {1..14}; do
  args+=( ${args[0]} )
done

/bin/echo "${args[@]}" "${args[0]:6534}" >/dev/null

"${args[0]:6533}"এখানে ব্যবহার করা শেষ যুক্তিটি 1 বাইট দীর্ঘায়িত করে এবং Argument list too longত্রুটি দেয় । এই পার্থক্যটি প্রদত্ত পরিবেশের আকার অনুসারে গণ্য হওয়ার সম্ভাবনা কম:

$ cat /proc/$$/environ | wc -c
1045

প্রশ্নাবলী:

  1. এই সঠিক আচরণ, বা কোথাও একটি বাগ আছে?
  2. তা না হলে এই আচরণটি কি কোথাও নথিবদ্ধ? অন্য কোন প্যারামিটার আছে যা একক যুক্তির জন্য সর্বাধিক সংজ্ঞা দেয়?
  3. এই আচরণটি কি লিনাক্সের মধ্যে সীমাবদ্ধ?
  4. আর্গুমেন্ট অ্যারের প্রকৃত সর্বোচ্চ আকার প্লাস এবং পরিবেশের আনুমানিক আকারের মধ্যে অতিরিক্ত ~ 5KB বৈষম্যের জন্য কী ARG_MAX?

অতিরিক্ত তথ্য:

uname -a
Linux graeme-rock 3.13-1-amd64 #1 SMP Debian 3.13.5-1 (2014-03-04) x86_64 GNU/Linux

5
লিনাক্সে এটি শক্তিশালীভাবে 32 পৃষ্ঠাগুলিতে (128kiB) কোড করা হয়েছে। উত্সটিতে MAX_ARG_STRLEN দেখুন।
স্টাফেন চেজেলাস

1
আপনি যে তথ্য সন্ধান করছেন তার বেশিরভাগটি সিপি-র উত্তরের
স্টাফেন চ্যাজেলাস

1
কমপক্ষে আমার মেশিনে, বর্তমানের getconf ARG_MAXউপর নির্ভর করে ulimit -s। এটি সীমাহীনতে সেট করুন এবং ARG_MAX এর জন্য একটি আশ্চর্যজনক 4611686018427387903 পান।
ডারোবার্ট


আপনি পাথ / প্রোক / $$ / এনভায়রনমেন্ট ব্যবহার করেন কেন? লিনাক্সের প্রোফসগুলি সিমিলিংক / প্রোক / স্বটিকে সমর্থন করে, তারপরে আপনি / প্রক্ট / স্ব / এনভায়রনমেন্ট ব্যবহার করতে পারেন। সমস্ত প্যাচগুলি প্রক্রিয়াতে নির্ধারিত হয়, যখন একই প্রক্রিয়া এটি পরীক্ষা করে, / প্রোকে / স্বকে নির্দেশ করে। ডেভফগুলি একই হয়, উদাহরণস্বরূপ / ডিভের অভ্যন্তরে, ডিভাইস স্টাডাউটটি এফডি / 1 তে সিমলিংক হয় তবে এফডি পয়েন্টগুলি / স্ব / এফডি তে হয়। অনেক সিস্টেম এই আচরণ অনুলিপি।
Znik

উত্তর:


48

উত্তর

  1. অবশ্যই কোনও বাগ নেই।
  2. যে প্যারামিটারটি একটি আর্গুমেন্টের জন্য সর্বাধিক আকার নির্ধারণ করে MAX_ARG_STRLEN। এই প্যারামিটারের জন্য মন্তব্যগুলি ছাড়া অন্য কোনও ডকুমেন্টেশন নেই binfmts.h:

    /*
     * These are the maximum length and maximum number of strings passed to the
     * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to
     * prevent the kernel from being unduly impacted by misaddressed pointers.
     * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
     */
    #define MAX_ARG_STRLEN (PAGE_SIZE * 32)
    #define MAX_ARG_STRINGS 0x7FFFFFFF
    

    যেমন দেখানো হয়েছে, লিনাক্সের একটি কমান্ডের পক্ষে আর্গুমেন্টের সংখ্যার (খুব বড়) সীমাও রয়েছে।

  3. একটি একক আর্গুমেন্টের আকারের একটি সীমা (যা আর্গুমেন্ট প্লাস পরিবেশের সামগ্রিক সীমা থেকে পৃথক) লিনাক্সের জন্য নির্দিষ্ট বলে মনে হয়। এই নিবন্ধটিARG_MAX সিস্টেমের মতো ইউনিক্সের সমতুল্যগুলির একটি বিশদ তুলনা এবং সমষ্টি সরবরাহ করে। MAX_ARG_STRLENলিনাক্সের জন্য আলোচনা করা হয়েছে, তবে অন্য কোনও সিস্টেমে এর সমতুল্যতার উল্লেখ নেই।

    উপরের নিবন্ধটিতে আরও বলা হয়েছে যে MAX_ARG_STRLENলিনাক্স ২.6.২৩ এ চালু হয়েছিল, কমান্ড আর্গুমেন্ট সর্বাধিক (নীচে আলোচনা করা হয়েছে) সম্পর্কিত আরও কয়েকটি পরিবর্তন সহ। কমিটের জন্য লগ / ডিফারেন্টটি এখানে পাওয়া যাবে

  4. এটি এখনও পরিষ্কার নয় যে ফলাফলের getconf ARG_MAXমধ্যে যুক্তি এবং পরিবেশের প্রকৃত সর্বোচ্চ সম্ভাব্য আকারের মধ্যে অতিরিক্ত তাত্পর্যপূর্ণতার জন্য কী । স্টিফেন চেজেলাস সম্পর্কিত উত্তর , প্রস্তাব দেয় যে স্থানটির অংশটি আর্গুমেন্ট / পরিবেশের প্রতিটি স্ট্রিংয়ের জন্য পয়েন্টার দ্বারা গণ্য করা হয়। তবে, আমার নিজের তদন্তে পরামর্শ দেওয়া হয়েছে যে কলিং প্রসেসে ত্রুটি execveফিরে আসতে পারে তখন সিস্টেম কলের শুরুতে এই পয়েন্টারগুলি তৈরি করা হয়নি E2BIG(যদিও প্রতিটি argvস্ট্রিংয়ের পয়েন্টারগুলি অবশ্যই পরে তৈরি করা হয়েছিল)।

    এছাড়াও, স্ট্রিংগুলি যতদূর আমি দেখতে পাচ্ছি মেমরিটিতে স্বচ্ছল তাই এখানে কোনও মেমরির ফাঁকগুলি প্রান্তিককরণ করে না। যদিও অতিরিক্ত মেমরিটি যা ব্যবহার করে তার মধ্যে একটি উপাদান হওয়ার সম্ভাবনা খুব বেশি । অতিরিক্ত স্থান কী ব্যবহার করে তা বোঝার জন্য কার্নেল কীভাবে মেমরি বরাদ্দ করে তার আরও বিস্তৃত জ্ঞানের প্রয়োজন (যা দরকারী জ্ঞান যা, তাই আমি তদন্ত করব এবং পরে আপডেট করব)।

এআরজি_ম্যাক্স বিভ্রান্তি

লিনাক্স ২.6.২৩ ( এই প্রতিশ্রুতির ফলস্বরূপ ), কমান্ড আর্গুমেন্ট সর্বাধিকভাবে পরিচালিত করার পদ্ধতিতে পরিবর্তন হয়েছে যা লিনাক্সকে অন্যান্য ইউনিক্সের মতো সিস্টেমের থেকে পৃথক করে তোলে। যোগ করা ছাড়াও MAX_ARG_STRLENএবং MAX_ARG_STRINGS, ফলে getconf ARG_MAXএখন স্ট্যাক আকারের উপর নির্ভর করে এবং থেকে আলাদা হতে পারে ARG_MAXমধ্যে limits.h

সাধারণত ফলাফল স্ট্যাক আকার getconf ARG_MAXহতে হবে 1/4। নিম্নোক্ত বিবেচনা bashব্যবহার ulimitস্ট্যাকের আকার পেতে:

$ echo $(( $(ulimit -s)*1024 / 4 ))  # ulimit output in KiB
2097152
$ getconf ARG_MAX
2097152

তবে এই প্রতিশ্রুতি দ্বারা উপরের আচরণটি কিছুটা পরিবর্তন করা হয়েছিল (লিনাক্স ২. Linux.২৫-আরসি 4 ~ 121 এ যুক্ত)। ARG_MAXমধ্যে limits.hএখন একটি কঠিন এর ফলাফলে আবদ্ধ নিম্ন তোলে getconf ARG_MAX। যদি স্ট্যাকের আকারটি এমনভাবে সেট করা থাকে যে 1/4স্ট্যাকের আকারটি এর চেয়ে কম ARG_MAXহয় limits.h, তবে limits.hমানটি ব্যবহৃত হবে:

$ grep ARG_MAX /usr/include/linux/limits.h 
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */
$ ulimit -s 256
$ echo $(( $(ulimit -s)*1024 / 4 ))
65536
$ getconf ARG_MAX
131072

এও নোট করুন যে স্ট্যাকের আকারটি যদি সর্বনিম্ন সম্ভবের চেয়ে কম সেট করে ARG_MAX, তবে স্ট্যাকের আকার ( RLIMIT_STACK) পূর্বে E2BIGফিরে আসার আগে আর্গুমেন্ট / পরিবেশের আকারের উপরের সীমাতে পরিণত হয় (যদিও এর getconf ARG_MAXমধ্যে মানটি প্রদর্শিত হবে limits.h)।

একটি চূড়ান্ত বিষয় লক্ষণীয় হ'ল কার্নেলটি যদি CONFIG_MMU(মেমরি ম্যানেজমেন্ট হার্ডওয়্যারের জন্য সমর্থন) ছাড়াই নির্মিত হয় তবে চেকিং ARG_MAXনিষ্ক্রিয় করা হয়, সুতরাং সীমাটি প্রয়োগ হয় না। যদিও MAX_ARG_STRLENএবং MAX_ARG_STRINGSএখনও প্রয়োগ।

আরও পড়া

  • স্টিফেন চেজেলাস সম্পর্কিত সম্পর্কিত উত্তর - https://unix.stackexchange.com/a/110301/48083
  • উপরের বেশিরভাগটি কভার করে বিস্তারিত পৃষ্ঠায়। ARG_MAXঅন্যান্য ইউনিক্স-মতো সিস্টেমে (এবং সমমানের) মানগুলির একটি সারণি অন্তর্ভুক্ত করে - http://www.in-ulm.de/~mascheck/various/argmax/
  • আপাতদৃষ্টিতে MAX_ARG_STRLENঅটোমেকের সাথে একটি ত্রুটি দেখা দিয়েছে যা মেকফিলগুলিতে শেল স্ক্রিপ্টগুলি এম্বেড করছে sh -c- http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

2
এটি একটি ভাল উত্তর, আমার চেয়ে অবশ্যই ভাল - আমি এটি upvated। তবে আমরা যে উত্তরটি চেয়েছি তা সবসময় আমাদের কাছে পাওয়া উচিত উত্তর নেই - কেন আমরা জিজ্ঞাসা করছি, কারণ আমরা জানি না। এটি আপনার কাজের প্রবাহের সাথে সমস্যার সমাধান করে না যা আপনাকে প্রথমে এই ইস্যুটির সাথে প্রধান করে তুলেছে। আমি দেখিয়েছি যে এটি কীভাবে আমার নিজের উত্তরে প্রশমিত হতে পারে এবং 2 মিমি দৈর্ঘ্যের একক শেল পরিবর্তনশীল স্ট্রিং আর্গুমেন্টগুলি শেল স্ক্রিপ্টের মাত্র কয়েক লাইনের সাহায্যে নতুন অব্যাহতিপ্রাপ্ত প্রক্রিয়ায় কীভাবে প্রেরণ করা যায়।
মাইকসার্ভ

আমি একটি পাইথন স্ক্রিপ্ট তৈরি করেছি যা ডিফল্ট লিনাক্সে 32 * 4KB পৃষ্ঠাগুলি = 128 কেবি পরিবেশের ভেরিয়েবলের সীমা প্রদর্শন করে।
এনএইচ

0

মধ্যে eglibc-2.18/NEWS

* ARG_MAX is not anymore constant on Linux.  Use sysconf(_SC_ARG_MAX).
Implemented by Ulrich Drepper.

মধ্যে eglibc-2.18/debian/patches/kfreebsd/local-sysdeps.diff

+      case _SC_ARG_MAX:
+   request[0] = CTL_KERN;
+   request[1] = KERN_ARGMAX;
+   if (__sysctl(request, 2, &value, &len, NULL, 0) == -1)
+       return ARG_MAX;
+   return (long)value;

মধ্যে linux/include/uapi/linux/limits.h

#define ARG_MAX       131072    /* # bytes of args + environ for exec() */

এবং 131072এটি আপনার $(getconf ARG_MAX)/16-1, সম্ভবত আপনার 0 থেকে শুরু করা উচিত।

আপনি গ্লিবসি এবং লিনাক্স নিয়ে কাজ করছেন। "ডান" ARG_MAXমানটি ফেরত পেতে গেটকনফের প্যাচ করা ভাল হবে ।

সম্পাদনা:

কিছুটা পরিষ্কার করার জন্য (একটি সংক্ষিপ্ত তবে উত্তপ্ত আলোচনার পরে)

ARG_MAXধ্রুব যা সংজ্ঞায়িত করা হয় limits.h, এক যুক্তি Exec সঙ্গে গৃহীত সর্বোচ্চ দৈর্ঘ্য দেয়।

getconf ARG_MAXকমান্ড ক্রমযোজিত আর্গুমেন্ট আকার এবং পরিবেশ আকার Exec প্রেরণ এর সর্বোচ্চ মান ফেরায়।


2
যে ARG_MAXটি আর্গ + এনভির আকার সীমা জন্য ন্যূনতম গ্যারান্টিযুক্ত, এটি কোনও একক আর্গুমেন্টের সর্বোচ্চ আকার নয় (যদিও এটি MAX_ARG_STRLEN এর সমান মান হিসাবে ঘটে)
স্টাফেন

আপনার eglibc-2.18/NEWSস্নিপেটের জন্য আপনার একটি তারিখ রয়েছে ? এটি নির্দিষ্ট কার্নেলের সংস্করণে পিন করা ভাল হবে।
গ্রামীণ

@ স্টাফেনচাজেলাস: আমি এই অংশটি খুঁজে পেতে খুব অলস, কিন্তু যদি বিতর্কটি সর্বাধিক মানকে ছাড়িয়ে যায় তবে এনভির আকার নির্ধারণ করার প্রয়োজন হয় না।

@ গ্রামীম: আমার আরও কিছু পুরানো লিনাক্স চলছে যেখানে গেটকনফের মান 131072 দেখায় I আমি মনে করি এটি এমিলিবিসি> এর সাথে নতুন লিনাক্সের সাথে সম্পর্কিত? ?? কেবল. অভিনন্দন, আপনি একটি বাগ বিটিডাব্লু পেয়েছেন।

2
আপনি গ্লিবসি কোডটি দেখছেন, এটি এখানে অপ্রাসঙ্গিক। আপনি কোন আকারের আর্গুমেন্টগুলি পাস করছেন সেগুলি libc যত্নশীল করে না। আপনি যে কোডটি উদ্ধৃত করছেন সেটি সিসকনফ সম্পর্কিত, এটি একটি অ্যাপ্লিকেশন যা ব্যবহারকারীদের সর্বোচ্চ আকার (যার অর্থ যাই হোক না কেন) একটি আরজিভি + এনভি একটি এক্সিকিউট (2) এ পাস করেছে of এটি কার্নেল যা কোনও এক্সিকিভ () সিস্টেম কল সহ পাস করা আরগ এবং এনভিভি তালিকাটি গ্রহণ করে বা না করে। getconf ARG_MAXARG + + env ক্রমপুঞ্জিত আকারের হয় (সাম্প্রতিক লিনাক্সে পরিবর্তনশীল দেখুন ulimit -sএবং অন্যান্য প্রশ্ন আমি লিঙ্ক), এটি একটি একক ARG যার জন্য আছে কোন sysconf / getconf ক্যোয়ারী সর্বোচ্চ দৈর্ঘ্য সম্পর্কে নয়।
স্টাফেন চেজেলাস

-1

সুতরাং @ স্টাফেনচাজেলাস নীচের মন্তব্যে আমাকে যথাযথভাবে সংশোধন করেছেন - শেল নিজেই আপনার সিস্টেমে অনুমোদিত সর্বোচ্চ যুক্তির আকার কোনওভাবেই নির্দেশ দেয় না, বরং এটি আপনার কার্নেল দ্বারা সেট করা হয়েছে।

যেমনটি আরও অনেকে ইতিমধ্যে বলে গেছেন, মনে হয় যে কার্নেলটি সর্বাধিক যুক্তির আকার 128kb সীমাতে সর্বাধিক যুক্তির আকারের পরে যখন আপনি এটি সম্পাদন করার সময় অন্য যে কোনও থেকে নতুন প্রক্রিয়াতে হস্তান্তর করতে পারেন। আপনি বিশেষভাবে অনেক নেস্টেড $(command substitution)সাব-শেলগুলির কারণে এই সমস্যাটি অনুভব করেন যা অবশ্যই স্থানে কার্যকর করা উচিত এবং তাদের আউটপুটটির সম্পূর্ণতা এক থেকে পরেরটিতে হস্তান্তর করতে হবে।

এবং এটি একরকম বুনো অনুমান, তবে as 5 কিলোবাইটের তাত্পর্যটি প্রমিত সিস্টেম পৃষ্ঠার আকারের সাথে খুব কাছাকাছি বলে মনে হচ্ছে, আমার সন্দেহ হ'ল এটি পৃষ্ঠায় উত্সর্গীকৃত যা bashআপনার $(command substitution)চূড়ান্তভাবে তার আউটপুট সরবরাহ করার জন্য প্রয়োজনীয় প্রয়োজনীয়তাগুলি পরিচালনা করতে ব্যবহার করে এবং / অথবা ফাংশন স্ট্যাক এটি array tableআপনার ডেটা সাথে যুক্ত করতে নিযুক্ত করে। আমি কেবল ধরে নিতে পারি না উভয়ই নিখরচায় আসে।

আমি এটির নীচে প্রদর্শন করেছি, যদিও এটি কিছুটা জটিল হতে পারে, খুব বড় শেল ভেরিয়েবলের মানগুলি অনুরোধের সময় নতুন প্রক্রিয়াগুলিতে ছেড়ে দেওয়া সম্ভব হয়, যতক্ষণ আপনি এটি স্ট্রিম পরিচালনা করতে পারবেন।

এটি করার জন্য, আমি প্রাথমিকভাবে পাইপ ব্যবহার করি। তবে আমি নীচে ফলাফলগুলিতে একটি here-documentপয়েন্টে শেল অ্যারের মূল্যায়নও করেছি cat's stdin.

তবে একটি সর্বশেষ নোট - আপনার যদি পোর্টেবল কোডের জন্য বিশেষ প্রয়োজন না হয় তবে এটি আমাকে আঘাত করে যা mapfileআপনার শেল কাজগুলিকে কিছুটা সহজ করতে পারে।

time bash <<-\CMD
    ( for arg in `seq 1 6533` ; do
        printf 'args+=(' ; printf b%.0b `seq 1 6533` ; echo ')'
    done ;
    for arg in `seq 1 6533` ; do
        printf %s\\n printf\ '%s\\n'\ \""\${args[$arg]}"\" ;
    done ) | . /dev/stdin >&2
CMD
bash <<<''  66.19s user 3.75s system 84% cpu 1:22.65 total

সম্ভবত আপনি এটিকে দ্বিগুণ করতে পারেন এবং তারপরে আপনি যদি এটি স্ট্রিমগুলিতে করেন তবে তা আবার করতে পারেন - আমি এটির জন্য যথেষ্ট রোগী নই - তবে আপনি এটি প্রবাহিত করলে অবশ্যই এটি কাজ করে।

আমি printfজেনারেটরের অংশটি দুটি লাইনে পরিবর্তন করার চেষ্টা করেছি :

printf \ b%.0b

এটি কাজ করে:

bash <<<''  123.78s user 5.42s system 91% cpu 2:20.53 total

তাই হয়তো আমি কিছুটা আক্রান্ত। আমি বর্তমান মানটিতে zero padding hereআগের "$arg"মানটি ব্যবহার করি এবং যুক্ত করি "$arg"। আমি 6500 ছাড়িয়ে যেতে পারি ...

time bash <<-\CMD
    ( for arg in `seq 1 33` ; do
        echo $arg >&2
        printf 'args+=('"${args[$((a=arg-1))]}$(printf "%0${arg}0d" \
            `seq 1 6533` ; printf $((arg-1)))"')\n'
    done ;
    for arg in `seq 1 33` ; do
        printf '/usr/bin/cat <<HERE\n%s\nHERE\n' "\${args[$arg]}"
    done ) | . /dev/stdin >&2
CMD

bash <<<''  14.08s user 2.45s system 94% cpu 17.492 total

এবং যদি আমি catএই মত দেখতে লাইনটি পরিবর্তন করি :

printf '/usr/bin/cat <<HERE | { printf '$arg'\  ; wc -c ;}
    %s\nHERE\n' "\${args[$arg]}"

আমি wc.মনে রাখবেন থেকে বাইট সংখ্যাগুলি পেতে পারি মনে রাখবেন এগুলি প্রতিটি argsঅ্যারের কী আকারের the অ্যারের মোট আকার এই সমস্ত মানগুলির যোগফল।

1 130662
2 195992
3 261322
4 326652
5 391982
6 457312
7 522642
8 587972
9 653302
10 718633
11 783963
12 849293
13 914623
14 979953
15 1045283
16 1110613
17 1175943
18 1241273
19 1306603
20 1371933
21 1437263
22 1502593
23 1567923
24 1633253
25 1698583
26 1763913
27 1829243
28 1894573
29 1959903
30 2025233
31 2090563
32 2155893
33 2221223

2
না, শেলটির সাথে কিছুই করার নেই, যখন একক যুক্তি 128kiB এর বেশি হয় তখন এটি এক্সিকিউ (2) সিস্টেম কল রিটার্নিং E2BIG হয়।
স্টাফেন চেজেলাস

শেল বিল্টিনগুলির কোনও সীমাবদ্ধতা নেই - এগুলিও বিবেচনা করুন echo $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)*10))) >/dev/nullfine আপনি যখন কোনও বাহ্যিক কমান্ড ব্যবহার করেন কেবল তখনই সমস্যা হয়।
গ্রামীণ

@ গ্রামীম ওয়েল, আমি এটি বিড়ালের সাথেও করেছি - কোনও সমস্যা নেই। পরিবর্তনশীল শেষে একটি বংশগত মূল্যায়ন করা হয়। আমার শেষ সম্পাদনা দেখুন। আমি মোট সংখ্যাটি 33 টি করে কেটে ফেলেছি কারণ আমি প্রতিবারের সর্বশেষ মানটিতে যুক্ত করছি। এবং শূন্য প্যাডিং ...
মাইক্রজারভ

@ স্টাফেনচাজেলাস - তাই কি আমি হেরডোক প্রবাহে যুক্তিটি মূল্যায়ন করে এটিকে ঘিরে যাচ্ছি? নাকি bashকোনওভাবে সংকোচন করছে?
মাইকজার্ভ

1
@ মিকসার্ভ, আপনার কোডের মধ্যে আমি কোথাও দেখতে পাচ্ছি না আপনি কোনও বড় আরগ তালিকার সাহায্যে কোনও আদেশ কার্যকর করার কোনও উদাহরণ instance printfএটি একটি বিল্টিন তাই কার্যকর করা হয় না , এবং এএএএএফসিটি, আপনার catকোনও যুক্তি দেওয়া হয় না।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.