3> & 1 ইঙ্গিত করে 4> & 3 5> & 3 ইত্যাদি?


31

আমি আশা করব

echo foo | tee /proc/self/fd/{3..6} 3>&1

/ proc / স্ব / fd / 4 এর মতো ত্রুটিগুলি সহ ব্যর্থ হওয়া : এ জাতীয় কোনও ফাইল বা ডিরেক্টরি ইত্যাদি নয়, তবে আমার আশ্চর্যের বিষয়, এটি আউটপুট

foo
foo
foo
foo
foo

এটি 3>&1নিম্নলিখিত সমস্ত বর্ণনাকারীদের স্টডআউটে পুনঃনির্দেশিত করার কারণগুলির মতো , যদি আমি 3অন্য কিছুতে পরিবর্তন করি তবে এটি কাজ করে না

$ echo foo | tee /proc/self/fd/{3..6} 4>&1
tee: /proc/self/fd/3: No such file or directory
tee: /proc/self/fd/5: No such file or directory
tee: /proc/self/fd/6: No such file or directory
foo
foo
$ echo foo | tee /proc/self/fd/{4..6} 4>&1
tee: /proc/self/fd/5: No such file or directory
tee: /proc/self/fd/6: No such file or directory
foo
foo

এই আচরণের জন্য কি কোনও ব্যাখ্যা আছে?

উত্তর:


31

strace সিস্টেম কলগুলির এই ক্রমটি দেখায়:

$ strace -o strace.log tee /proc/self/fd/{3..6} 3>&1
...
$ cat strace.log
...
openat(AT_FDCWD, "/proc/self/fd/3", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
openat(AT_FDCWD, "/proc/self/fd/4", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 5
openat(AT_FDCWD, "/proc/self/fd/5", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 6
openat(AT_FDCWD, "/proc/self/fd/6", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 7
...

প্রথম লাইনটি খোলে /proc/self/fd/3এবং এটি পরবর্তী উপলব্ধ এফডি সংখ্যা 4 নির্ধারণ করে, /proc/self/fd/3একটি বিশেষ পথ। এটি খোলার ফলে এফডি 3: ফড 4 পয়েন্ট একই জায়গায় 4 ডি পয়েন্ট, ডাব্লুপি এর মতোই প্রভাব রয়েছে t

একের পর এক openat()কলের জন্য একই জিনিস ঘটে । ধুলো যখন এফডিএস 4, 5, 6, এবং 7 স্থির করে তখন এফডির 3 টির নকল।

  • 1 → tty
  • 3 → tty
  • 4 → tty
  • 5 → tty
  • 6 → tty
  • 7 → টিটি

মনে রাখবেন যে 3>&1পুনঃনির্দেশ গুরুত্বপূর্ণ নয়। সবচেয়ে গুরুত্বপূর্ণটি হ'ল আমরা টি-কে খুলতে বলছি /proc/self/fd/Nযেখানে এন ইতিমধ্যে ব্যবহৃত রয়েছে। আমরা যদি পরিত্রাণ পেতে 3>&1এবং /proc/self/fd/2পরিবর্তে টি শুরু করি তবে আমাদের একই ফল পাওয়া উচিত । দেখা যাক:

$ echo foo | tee /proc/self/fd/{2..6}
foo
foo
foo
foo
foo
foo

নিশ্চিত হয়েছে! একই ফলাফল।

আমরা একই সাথে এফডি সংখ্যাটিও বারবার করতে পারি। আমরা যখন এফডি 6. টি আঘাত করি তখন আমরা একই ফল পাই it এটি শেষের দিকে পৌঁছানোর সাথে সাথে এটি des টি জাম্পকে সম্ভব করার জন্য পর্যাপ্ত বর্ণনাকারী খুলেছে।

$ echo foo | tee /proc/self/fd/{2,2,2,2,6}
foo
foo
foo
foo
foo
foo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.