আমি একটি tcsh স্ক্রিপ্টে / dev / stderr তে নির্দেশনা দিয়ে কিছু পরীক্ষা করেছি। আমার
উদ্দেশ্যটি স্ক্রিপ্টের ব্যবহারকারীর (সরাসরি tcsh) সক্ষম হওয়ার উদ্দেশ্যে ছিল
বিভিন্ন আউটপুট স্ট্যান্ডার্ড আউটপুট এবং মান ত্রুটি। আমি যে পাওয়া যায়
স্ক্রিপ্ট মত চেহারা ছিল:
echo 1abc
echo 1ABC >>& /dev/stderr
echo 2abc
echo 2ABC >>& /dev/stderr
যদি আপনি & gt; & gt; ব্যবহার করেন না, তবে পুনঃনির্দেশিত স্ক্রিপ্ট আউটপুটে, আপনি হারাবেন
স্ট্যান্ডার্ড ইনপুট এবং / অথবা মান আউটপুট তথ্য কিছু। এমনকি তাই, পুনঃনির্দেশিত
একটি সহজে & gt; & amp; ব্যবহার করে একটি ফাইল স্ক্রিপ্টের আউটপুট না না কাজ করে; এটা খুব
স্ট্যান্ডার্ড ত্রুটির অংশ হারান (এমনকি bash উপর)। আপনি অবশ্যই ব্যবহার করা
(SCRIPT >! file.out ) >&! file.err
গঠন করা। এখানে ফাইল বা উভয় পর্দায় আউটপুট জন্য / dev / tty হতে পারে।
(যদি আপনি স্ক্রিপ্ট আউটপুট পুনঃনির্দেশ না করেন তবে কোনও সমস্যা নেই।)
আপনি যদি মান ত্রুটি থেকে সরাসরি নির্দেশ করেন যে এই অদ্ভুততা কোনটি ঘটে
একটি প্রোগ্রাম ভিতরে।
এছাড়াও লিনাক্সে (উবুন্টু-ম্যাট LTS 16.04, সুনির্দিষ্ট হতে) এটিও মনে রাখবেন। অবশ্যই আপনি ব্যবহারযোগ্য হতে অন্তত জন্য বিদ্যমান অন্তত / dev / stderr প্রয়োজন।
এই পোস্ট করার পরে, আমি এখনও অন্য সমস্যা খুঁজে পাওয়া যায় নি। যদি আপনি 1ABC লাইনের পরে মান ত্রুটিতে লিখিত কোনও প্রোগ্রাম করেন তবে আপনার যদি 1ABC হারিয়ে যায়
একটি ফাইল সরাসরি মান ত্রুটি। ভাল খবর আমার ক্ষেত্রে, মান
ত্রুটি / dev / tty যেতে অবিরত করতে হবে। ঘি। :)
সহজ পরিবর্তন, এবং / dev / stderr ব্যতীত সিস্টেমগুলির জন্য, আমি নিম্নলিখিত দুটি হেডার লাইনের মাধ্যমে এটি বাস্তবায়ন করার সিদ্ধান্ত নিয়েছি
alias stderr echo ; if (-ew /dev/stderr) alias stderr 'echo \!* >> /dev/stderr'
which echo_err > /dev/null ; if !($status) alias stderr echo_err
এটি ব্যবহারকারীকে একটি sh স্ক্রিপ্ট echo_err রাখতে দেয়,
#!/bin/sh
echo $* 1>&2
স্ট্যান্ডার্ড ত্রুটির বাগ মুক্ত মুক্ত পুনর্নির্দেশ যদি পাথ সত্যিই প্রয়োজন (এ
দুই ইমেজ অ্যাক্টিভেশন খরচ)।
আরেকটি সংযোজন: উপরে আমার পোস্ট / dev / stderr থেকে পুনঃনির্দেশিত বিষয়ে বিষয় ছিল
tcsh মধ্যে। কিন্তু যতদিন আমি উপাধি দিচ্ছি, হয়ত আমাকেও দিতে হবে
গ্লেন রাগান এর সমাধানের জন্য এক, যা আপনি যদি মনে না করেন তবে সত্যিই খুব সুন্দর
একটি ইমেজ অ্যাক্টিভেশন। নির্ধারণ করা
alias 1to2 '\!* | sh -c "cat 1>&2"'
alias 2to1 '\!* |& cat'
তারপরে আপনি যে কোনও কমান্ডের জন্য পূর্ববর্তী স্টুডিওতে 1to2 দ্বারা পুনঃনির্দেশিত করতে চান তার আগে আপনি যে কোনও কমান্ডের পূর্ববর্তী হতে পারেন। যেটি DOS সহ অন্যান্য শেলগুলিতে 1 & gt; 2 দ্বারা কমান্ডটি আগের মতো কাজ করে। এবং এটা লিনাক্সে বাগ্গী নয়। পাশাপাশি খুব 2o1 আছে, হতে পারে। :)
OOPS: উপরে 1to2 একটি ছোটখাটো ত্রুটি: যদি কমান্ডটি স্ট্যান্ডার্ড আউটপুট এবং মানক ত্রুটির উভয় ক্ষেত্রেই লেখা থাকে, তবে অর্ডারটি ভুল। কমান্ডের স্ট্যান্ডার্ড ত্রুটি স্টাফ চূড়ান্ত মান ত্রুটি ফলাফলের মধ্যে তার মান আউটপুট স্টাফ আগে শেষ হয়। সমাধান সহজ; পরিবর্তন | মধ্যে | & amp ;:
alias 1to2 '\!* |& sh -c "cat 1>&2"'
এর জন্যে দুঃখিত.
echo test >&2
stderr থেকে প্রিন্ট। আমার অন্তত অন্তত।