আমি এটি করতে অভ্যস্ত হয়ে উঠছি:
someprogram >output.file
যখনই আমি কোনও প্রোগ্রাম কোনও ফাইলের উত্পন্ন আউটপুট সংরক্ষণ করতে চাই তখনই এটি করি। আমি এই আইও পুনঃনির্দেশের দুটি রূপ সম্পর্কেও সচেতন :
someprogram 2>output.of.stderr.file(স্টাডারের জন্য)someprogram &>output.stderr.and.stdout.file(উভয় stdout + stderr এর জন্য)
আজ আমি এমন একটি পরিস্থিতি পেরিয়ে এসেছি যা আমি সম্ভব বলে ভাবিনি। আমি নিম্নলিখিত কমান্ডটি ব্যবহার করি xinput test 10এবং প্রত্যাশার সাথে আমার নিম্নলিখিত আউটপুট থাকে:
ব্যবহারকারী @ হোস্টনাম: in in এক্সপুট পরীক্ষা 10 কী টিপুন 30 কী রিলিজ 30 কী টিপুন 40 কী রিলিজ 40 কী টিপুন 32 কী রিলিজ 32 কী টিপুন 65 কী রিলিজ 65 কী টিপুন 61 কী রিলিজ 61 কী টিপুন 31 ^ সি ব্যবহারকারী @ হোস্টনাম: ~ $
আমি আশা যে এই আউটপুট স্বাভাবিক ব্যবহার করার মত একটি ফাইলে সংরক্ষণ করা যায়নি xinput test 10 > output.file। তবে আমার প্রত্যাশার বিপরীতে ফাইল আউটপুট.ফাইল খালি থাকবে। xinput test 10 &> output.fileআমি stdout বা stderr এ কিছু মিস করি না তা নিশ্চিত করার জন্য এটিও সত্য ।
আমি সত্যিই বিভ্রান্ত হয়ে পড়েছি এবং তাই এখানে জিজ্ঞাসা করুন যদি xinputপ্রোগ্রামটির আউটপুটটিকে পুনঃনির্দেশিত করা এড়াতে কোনও উপায় থাকতে পারে?
হালনাগাদ
আমি উত্স তাকিয়ে আছে। দেখে মনে হচ্ছে আউটপুটটি এই কোডটি দ্বারা উত্পাদিত হয়েছে (নীচে স্নিপেট দেখুন)। আমার কাছে মনে হচ্ছে আউটপুটটি একটি সাধারণ মুদ্রণযোগ্য দ্বারা উত্পাদিত হবে
// ফাইল টেস্ট.সি
স্ট্যাটিক অকার্যকর মুদ্রণ_আভেন্টস (প্রদর্শন * ডিপিপি)
{
এক্সভেন্ট ইভেন্ট;
(1) while
এক্সনেক্সট ইভেন্ট (ডিপিপি, এবং ইভেন্ট);
// [... কিছু অন্যান্য ইভেন্টের ধরন এখানে বাদ দেওয়া হয়েছে ...]
যদি ((ইভেন্ট.প্রকার == কী_প্রেস_প্রকার)) ||
(ইভেন্ট.প্রকার == কী_প্রথম_প্রকার)) {
int লুপ;
এক্সডেভাইসকিউইভেন্ট * কী = (এক্সডেভাইসকিউভেস্ট *) & ইভেন্ট;
প্রিন্টফ ("কী% s% d", (ইভেন্ট. টাইপ == কী_ রিলিজ_ টাইপ)? "রিলিজ": "টিপুন", কী-> কীকোড);
(লুপ = 0; লুপপ্যাক্স_কাউন্ট; লুপ ++) এর জন্য {
প্রিন্টফ ("এ [% ডি] =% ডি", কী-> ফার্স্ট_এক্সিস + লুপ, কী-> অক্ষ_ডাটা [লুপ]);
}
printf, ( "\ N");
}
}
}
আমি উত্সটি এটিতে পরিবর্তিত করেছি (নীচের পরবর্তী স্নিপেটটি দেখুন), যা আমাকে স্ট্ডারারের আউটপুটটির একটি অনুলিপি রাখতে দেয়। এই আউটপুট আমি পুনঃনির্দেশ করতে সক্ষম:
// ফাইল টেস্ট.সি
স্ট্যাটিক অকার্যকর মুদ্রণ_আভেন্টস (প্রদর্শন * ডিপিপি)
{
এক্সভেন্ট ইভেন্ট;
(1) while
এক্সনেক্সট ইভেন্ট (ডিপিপি, এবং ইভেন্ট);
// [... কিছু অন্যান্য ইভেন্টের ধরন এখানে বাদ দেওয়া হয়েছে ...]
যদি ((ইভেন্ট.প্রকার == কী_প্রেস_প্রকার)) ||
(ইভেন্ট.প্রকার == কী_প্রথম_প্রকার)) {
int লুপ;
এক্সডেভাইসকিউইভেন্ট * কী = (এক্সডেভাইসকিউভেস্ট *) & ইভেন্ট;
প্রিন্টফ ("কী% s% d", (ইভেন্ট. টাইপ == কী_ রিলিজ_ টাইপ)? "রিলিজ": "টিপুন", কী-> কীকোড);
fprintf (stderr, "key% s% d", (ইভেন্ট. টাইপ == কী_ রিলিজ_ টাইপ)? "রিলিজ": "টিপুন", কী-> কীকোড);
(লুপ = 0; লুপপ্যাক্স_কাউন্ট; লুপ ++) এর জন্য {
প্রিন্টফ ("এ [% ডি] =% ডি", কী-> ফার্স্ট_এক্সিস + লুপ, কী-> অক্ষ_ডাটা [লুপ]);
}
printf, ( "\ N");
}
}
}
বর্তমানে আমার ধারণাটি হ'ল পুনর্নির্দেশটি করে প্রোগ্রামটি কী-প্রেস কী-রিলিজ ইভেন্টগুলি পর্যবেক্ষণ করার ক্ষমতা হারাবে।