যখন আপনি একটি কমান্ডের তালিকা পুনর্নির্দেশ করেন যা এক্সিকিউটি রিডাইরেকশন ধারণ করে, এক্সিকিউটিভ / / দেব / নাল এখনও পরে প্রয়োগ করা হবে বলে মনে হয় না যেমন:
{ exec >/dev/null; } >/dev/null; echo "Hi"
"হাই" ছাপা হয়
আমি এই ছাপে ছিলাম যে {}
কমান্ড তালিকাটি যদি পাইপলাইনের অংশ না হয় তবে সাব- exec >/dev/null
শেল হিসাবে বিবেচিত হবে না, সুতরাং এটি এখনও আমার মনের বর্তমান শেল পরিবেশের মধ্যে প্রয়োগ করা উচিত।
এখন আপনি যদি এটিকে পরিবর্তন করেন:
{ exec >/dev/null; } 2>/dev/null; echo "Hi"
আশানুরূপ কোনও আউটপুট নেই; ফাইল বর্ণনাকারী 1 ভবিষ্যতে কমান্ডের পাশাপাশি / dev / নালকে লক্ষ্য করা যায়। এটি পুনরায় চালনার মাধ্যমে দেখানো হয়েছে:
{ exec >/dev/null; } >/dev/null; echo "Hi"
যা কোনও আউটপুট দেবে না।
আমি একটি স্ক্রিপ্ট তৈরি এবং এটি স্ট্রাক করার চেষ্টা করেছি, তবে আমি এখানে এখনও ঠিক কী ঘটছে তা সম্পর্কে নিশ্চিত নই।
এই স্ক্রিপ্টের প্রতিটি বিন্দুতে STDOUT ফাইল বর্ণনাকারীর কী হচ্ছে?
সম্পাদনা: আমার স্ট্রেস আউটপুট যুক্ত করা হচ্ছে:
read(255, "#!/usr/bin/env bash\n{ exec 1>/de"..., 65) = 65
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(1, F_GETFD) = 0
fcntl(1, F_DUPFD, 10) = 10
fcntl(1, F_GETFD) = 0
fcntl(10, F_SETFD, FD_CLOEXEC) = 0
dup2(3, 1) = 1
close(3) = 0
close(10) = 0
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(1, F_GETFD) = 0
fcntl(1, F_DUPFD, 10) = 10
fcntl(1, F_GETFD) = 0
fcntl(10, F_SETFD, FD_CLOEXEC) = 0
dup2(3, 1) = 1
close(3) = 0
dup2(10, 1) = 1
fcntl(10, F_GETFD) = 0x1 (flags FD_CLOEXEC)
close(10) = 0
fstat(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
ioctl(1, TCGETS, 0x7ffee027ef90) = -1 ENOTTY (Inappropriate ioctl for device)
write(1, "hi\n", 3) = 3
;
পরে একটি বিপথগামী হয়েছে }
, যা সর্বোপরি > /dev/null
যৌগিক তালিকায় প্রয়োগ না করার অর্থ পরিবর্তন করে {}
।
close(10)
। আপনি নিজের স্ক্রিপ্টের সম্পূর্ণ লিখিত সামগ্রীও পোস্ট করতে পারেন যার উপর আপনি স্ট্রেস রেখেছিলেন?