সদৃশ এখানে সত্যই গুরুত্বপূর্ণ অংশ।
পুনরায়নির্দেশের আগে ফাইল বর্ণনাকারী কোথায় চলেছে তা দেখুন। এটি সাধারণত বর্তমান টার্মিনাল, যেমন:
STDOUT ---> /dev/pts/1
STDERR ---> /dev/pts/1
এখন, আমরা যদি ls -lপুনঃনির্দেশ ছাড়াই কল করি তবে আউটপুট এবং ত্রুটি বার্তাগুলি আমার টার্মিনালের নীচে চলে /dev/pts/1।
আমরা যদি প্রথমে STDOUTকোনও ফাইলের ( ls -l > dirlist) এ পুনঃনির্দেশ করি , তবে এটির মতো দেখাচ্ছে:
STDOUT ---> /home/bon/dirlist
STDERR ---> /dev/pts/1
আমরা যখন তারপর পুনর্নির্দেশ STDERRএকটি থেকে ডুপ্লিকেট এর STDOUT'র ফাইল বর্ণনাকারী ( ls -l > dirlist 2>&1), STDERRসদৃশ যায় /home/bon/dirlist:
STDOUT ---> /home/bon/dirlist
STDERR ---> /home/bon/dirlist
যদি আমরা প্রথমে এর ফাইল বর্ণনাকারীর ( ) STDERRনকলটি পুনর্নির্দেশ করি :STDOUTls -l 2>&1
STDOUT ---> /dev/pts/1
STDERR ---> /dev/pts/1
এবং তারপরে STDOUT একটি ফাইল ( ls -l 2>&1 > dirlist) এ, আমরা এটি পেয়ে যাব:
STDOUT ---> /home/bon/dirlist
STDERR ---> /dev/pts/1
এখানে, STDERRএখনও টার্মিনালে যাচ্ছে।
আপনি দেখতে পাচ্ছেন, ম্যান পেজে ক্রমটি সঠিক।
পুনর্নির্দেশ পরীক্ষা করা হচ্ছে
এখন, আপনি এটি পরীক্ষা করতে পারেন। ব্যবহার করে ls -l /proc/$$/fd/আপনি দেখতে পাবেন যেখানে STDOUT(এফডি 1 সহ) এবং STDERR(এফডি 2 সহ) বর্তমান প্রক্রিয়াটি চলছে:
$ ls -l /proc/$$/fd/
total 0
lrwx------ 1 bon bon 64 Jul 24 18:19 0 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 18:19 1 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 07:41 2 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 18:19 255 -> /dev/pts/1
আসুন একটি ছোট শেল স্ক্রিপ্ট তৈরি করুন যা দেখায় যে আপনার ফাইল বর্ণনাকারীদের কোথায় নির্দেশ করা হয়েছে। এইভাবে, lsকলিং শেল থেকে কোনও পুনর্নির্দেশ সহ কল করার সময় আমরা সর্বদা রাষ্ট্র পাই get
$ cat > lookfd.sh
#!/bin/sh
ls -l /proc/$$/fd/
^D
$ chmod +x lookfd.sh
(এর সাথে CtrlD, আপনি ফাইলের শেষের দিকে প্রেরণ করুন এবং সুতরাং catআদেশটি পাঠানো বন্ধ করুন STDIN))
পুনঃনির্দেশের বিভিন্ন সংমিশ্রণ সহ এখন এই স্ক্রিপ্টটি কল করুন:
$ ./lookfd.sh
total 0
lrwx------ 1 bon bon 64 Jul 24 19:08 0 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 19:08 1 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 19:08 2 -> /dev/pts/1
lr-x------ 1 bon bon 64 Jul 24 19:08 255 -> /home/bon/lookfd.sh
$ ./lookfd.sh > foo.out
$ cat foo.out
total 0
lrwx------ 1 bon bon 64 Jul 24 19:10 0 -> /dev/pts/1
l-wx------ 1 bon bon 64 Jul 24 19:10 1 -> /home/bon/foo.out
lrwx------ 1 bon bon 64 Jul 24 19:10 2 -> /dev/pts/1
lr-x------ 1 bon bon 64 Jul 24 19:10 255 -> /home/bon/lookfd.sh
$ ./lookfd.sh 2>&1 > foo.out
$ cat foo.out
total 0
lrwx------ 1 bon bon 64 Jul 24 19:10 0 -> /dev/pts/1
l-wx------ 1 bon bon 64 Jul 24 19:10 1 -> /home/bon/foo.out
lrwx------ 1 bon bon 64 Jul 24 19:10 2 -> /dev/pts/1
lr-x------ 1 bon bon 64 Jul 24 19:10 255 -> /home/bon/lookfd.sh
$ ./lookfd.sh > foo.out 2>&1
$ cat foo.out
total 0
lrwx------ 1 bon bon 64 Jul 24 19:11 0 -> /dev/pts/1
l-wx------ 1 bon bon 64 Jul 24 19:11 1 -> /home/bon/foo.out
l-wx------ 1 bon bon 64 Jul 24 19:11 2 -> /home/bon/foo.out
lr-x------ 1 bon bon 64 Jul 24 19:11 255 -> /home/bon/lookfd.sh
আপনি দেখতে পাচ্ছেন, ফাইল বর্ণনাকারী 1 (for STDOUT) এবং 2 (for STDERR) পৃথক হয়। মজা করার জন্য, আপনি পুনর্নির্দেশ STDINএবং ফলাফল দেখতে পারেন:
$ ./lookfd.sh < /dev/zero
total 0
lr-x------ 1 bon bon 64 Jul 24 19:18 0 -> /dev/zero
lrwx------ 1 bon bon 64 Jul 24 19:18 1 -> /dev/pts/1
lrwx------ 1 bon bon 64 Jul 24 19:18 2 -> /dev/pts/1
lr-x------ 1 bon bon 64 Jul 24 19:18 255 -> /home/bon/lookfd.sh
(পাঠকের কাছে প্রশ্ন রেখে গেছে: ফাইল বিবরণকারী 255 পয়েন্টটি কোথায় করবে ?;-))