পুনঃনির্দেশের সময় বিভিন্ন আউটপুট


10
$ mysql -e 'select a,b from tablefoo' databasename

উৎপাদনের

+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+

যেহেতু

$ mysql -e 'select a,b from tablefoo' databasename > file

একটি ফাইল উৎপাদ fileধারণকারী

a b
1 0
2 1

(যেখানে প্রতিটি লাইনের বর্ণচিহ্নগুলির মধ্যে একটি ট্যাব থাকে)।

আমি মনে করি যে পুনঃনির্দেশের আউটপুট পরিবর্তন করা উচিত নয়। কেন আমি দুটি ভিন্ন ফলাফল পেতে পারি?


সম্পাদনা: উইলিয়াম জ্যাকসন এর উত্তর বলছেন যে এই MySQL এর একটি বৈশিষ্ট্য হল: আউটপুট ফরম্যাট কিনা আউটপুট পুনঃনির্দেশিত করা হচ্ছে উপর নির্ভর করে। যদিও এটি আমার প্রশ্নের উত্তর দেয় না। আউটপুট পুনঃনির্দেশিত হচ্ছে কিনা তা কীভাবে মাইএসকিএল 'জানবে'? পুনর্নির্দেশটি কি কেবল আউটপুট নেয় না এবং ভাল, কোথাও এটি পুনর্নির্দেশ করে? এটি কি মাইএসকিএলে অদৃশ্য হওয়া উচিত নয়?


যোগ -tআপনার মাইএসকিউএল কমান্ড :) পতাকা
spencer.sm

উত্তর:


13

সম্পাদনা: এটি কীভাবে mysqlহয় তা আমি নিশ্চিত হতে পারি না তবে এটি টার্মিনাল isatty(3)কিনা তা নির্ধারণের জন্য ব্যবহার করতে পারে STDOUTএবং সেই অনুযায়ী আউটপুট পরিবর্তন করতে পারে।

সম্পাদনা করুন 2:mysql কমান্ড লাইন টুল স্পষ্টভাবে ব্যবহার isatty()আপনি উত্স কোড পড়তে পারেন।

Cস্ট্যাক ওভারফ্লোতে এর কয়েকটি ভাল উদাহরণ রয়েছে (যদিও এর মধ্যে নেই ):


আপনার প্রশ্নের উত্তর দেওয়ার জন্য, "কেন?": কারণ ডকুমেন্টেশনটি এটাই বলে। রেফারেন্স ম্যানুয়াল দেখুন :

ইন্টারেক্টিভভাবে ব্যবহার করা হলে, ক্যোয়ারির ফলাফলগুলি ASCII- সারণী বিন্যাসে উপস্থাপিত হয়। যখন অবিচ্ছিন্নভাবে ব্যবহার করা হয় (উদাহরণস্বরূপ, ফিল্টার হিসাবে), ফলাফলটি ট্যাব-বিচ্ছিন্ন বিন্যাসে উপস্থাপিত হয়।

আমি সন্দেহ করি এই সিদ্ধান্তটি পাঠযোগ্যতার জন্য হয়েছিল। ইন্টারেক্টিভভাবে ব্যবহার করা হলে, mysqlধরে নেওয়া যায় যে কোনও মানুষ আউটপুটটি পড়ছে, এবং আমাদের পক্ষে সাধারণত lines লাইনের দ্বারা সীমিত করা ডেটা পড়া সহজ হয়। অ-ইন্টারেক্টিভভাবে ব্যবহার করা হলে, অনুমানটি হ'ল অন্য প্রোগ্রাম আউটপুট গ্রাস করতে চলেছে, এবং সেই ট্যাব-বিস্মৃত আউটপুটটি প্রোগ্রামিকভাবে গ্রাস করা সহজ।

আপনি যদি এই ডিফল্টটিকে ওভাররাইড করতে এবং আউটপুটটিকে পুনর্নির্দেশের সময় ASCII- সারণী বিন্যাস পেতে আগ্রহী হন তবে আপনি --table( -t) কমান্ড লাইন বিকল্পটি ব্যবহার করতে পারেন :

mysql -t -e 'select a,b from tablefoo' databasename > file

1
আমি ডিফল্ট ওভাররাইডে আগ্রহী নই। Output আউটপুট মধ্যে পার্থক্যটি মাইএসকিএল-এর কিছু কারণে বা বাশের কোনও কারণে ছিল কিনা তা আমি জানতাম না। তবে এটি আমার প্রশ্নের পুরো উত্তর দেয় না। মাইএসকিএল কীভাবে জানতে পারে যে এর আউটপুটে কী হচ্ছে? আমি মনে করি পুনঃনির্দেশটি mysql- তে অদৃশ্য হওয়া উচিত ible আমি জিজ্ঞাসা বলতে কী বোঝাতে চাইছি তা আরও স্পষ্ট করে জানাতে আমি প্রশ্নটি সম্পাদনা করেছি। +1, যদিও খুব সুন্দরভাবে উত্তর দেওয়ার জন্য আমি (স্পষ্টতই) মনে করছি যে প্রশ্নটি করছে।
msh210

আহ, আমি ভুল বুঝেছিলাম। আমি আমার উত্তর আপডেট।
উইলিয়াম জ্যাকসন

আহ, যে সাহায্য করে। তবে এটি এখনও আমি যা চাই তা সত্য নয়, যা "কীভাবে 'জানেন'?" অর্থাৎ, ইসতিটি মাইএসকিএল দ্বারা ডাকা হয়। স্টাডআউটটি টিটিআই কিনা তা মাইএসকিএলে নয়, বাশের জীবনের সত্য। মাইএসকিএল কীভাবে জানতে পারে যে বাশে কী চলছে? আমি ভাবব ব্যাশে থাকা জিনিসগুলি মাইএসকিএল-তে অদৃশ্য হয়ে থাকবে।
msh210

1
স্টডআউট একটি ফাইল বর্ণনাকারী, এবং এটি ডিসটিতে কোনও টিটি বা কোনও ফাইলের দিকে নির্দেশ করছে কিনা তা নির্ধারণ করতে অন্য কোনও প্রোগ্রামের মতোই এটি bashব্যবহার করতে পারে isatty()isatty()ওএস দ্বারা সরবরাহ করা হয়, বাশ নয়।
উইলিয়াম জ্যাকসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.