উপর এই তাই থ্রেড এবং কয়েক অন্যান্য থ্রেড আমি পুনঃনির্দেশিত নীচের কমান্ডের দেখেছি stdoutএবং stderrএকটি ফাইলে।
এরা কি সব সমতুল্য? তাদের মধ্যে কি কোনও পার্থক্য আছে?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
উপর এই তাই থ্রেড এবং কয়েক অন্যান্য থ্রেড আমি পুনঃনির্দেশিত নীচের কমান্ডের দেখেছি stdoutএবং stderrএকটি ফাইলে।
এরা কি সব সমতুল্য? তাদের মধ্যে কি কোনও পার্থক্য আছে?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
উত্তর:
যেহেতু আপনি ট্যাগ করেছেন zsh, আপনাকে বলি যে 3 টি পুনর্নির্দেশগুলি ঠিক একইভাবে কাজ করে। যেহেতু আপনি উভয় সদৃশ পোস্টে পড়েছেন (মন্তব্যে একটি এবং আপনার পোস্টে একটি), সেগুলি পুনরায় ডাইরেক্ট করা stderrহয়েছে stdoutকোন প্রবেশদানে ফাইল 'লগফিল' পুনর্নির্দেশ করা হয়েছে (যেমন, লগফাইলে আউটপুট এবং ত্রুটি উভয়ই থাকবে )।
তবে আপনি যে শেলটি রাখছেন তার উপর নির্ভর করে তাদের আচরণটি অনেকগুলি পরিবর্তন করে।
সকল পুনঃনির্দেশগুলি তিন মডেল একই ভাবে ভাল কাজ করে bashএবংzsh
কিন্তু:
শুধুমাত্র বা >&মধ্যে কাজ করেcshtcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
ইন kshশুধুমাত্র 2>&1কাজ করে।
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
আমি ঘ্রিনা করি ksh। যদিও >&মাত্র একটি ত্রুটি দিয়েছেন, &>কমান্ড একটি অংশ পশ্চাদপটে করা এবং লগ ফাইল (যদি অ খালি) খালি।
sh? যদি এটি পসিক্স শেল হয়, &>এবং >&কাজ করবে না।
&>এবং >&আধা সমতুল্য (ক্লোবার)zshম্যানুয়াল পুনঃনির্দেশগুলি অধ্যায় যে বলেন:
&>>&সমতুল্য
উভয়ই ফাইলটি > fileক্লোবার করবে - এটি লেখার আগে এটি 0 বাইটে ফাইল কেটে ফেলবে , কেবল এসটিডিআইএন-এর ক্ষেত্রেই করবে।
তবে , bashম্যানুয়াল পুনঃনির্দেশগুলি অধ্যায় যে যোগ করেছেন:
দুটি ফর্মের মধ্যে প্রথমটি পছন্দ করা হয়। এটি শব্দার্থগতভাবে সমান
>word 2>&1দ্বিতীয় ফর্মটি ব্যবহার করার সময় শব্দটি কোনও সংখ্যায় বা প্রসারিত নাও হতে পারে
-। যদি এটি হয় তবে অন্যান্য পুনর্নির্দেশ অপারেটরগুলি সামঞ্জস্যতার কারণে (নীচে নকল ফাইল বর্ণনাকারী দেখুন) প্রয়োগ করে।
সুতরাং, যখন আপনাকে ট্যাগ করেছে zsh, তাহলে এটা সম্ভবত আদি ধরনে থাকে আঙুল মেমরির পেতে কেউ কখনও একটি লেখা উচিত ভাল অভ্যাস bashস্ক্রিপ্ট।
>> logfile 2>&1এবং &>>সমতা (সংযোজন)এখানে, logfileওভাররাইট করা হয় না, তবে ফাইলটির শেষে লেখার জন্য খোলা হয়, অর্থাৎ অ্যাপেনড মোড ( O_APPEND)।
উভয়ের সমতুল্য {ba,z}sh:
command1 &>> logfile
ইন bash:
স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি সংযোজনের জন্য ফর্ম্যাটটি হ'ল:
&>>wordএটি শব্দার্থগতভাবে সমান
>>word 2>&1(নীচে ফাইল বর্ণনাকারীর নকল দেখুন)।
(দ্রষ্টব্য: এর কঠোর সমালোচনা করা ব্যবহার &>উপর >&বিভাগে উপরে আবার দেওয়া সুপারিশ সেখানে সংযোজন কেবল একটি পদ্ধতি bash।)
zshউভয় &>>এবং >>&ফর্ম অনুমতি দেয় ।