কমান্ডের শেষে ড্যাশ "-" অর্থ কী?


78

নিম্নলিখিত আদেশ দেওয়া:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf 

কী -কমান্ডের শেষে মানে? এটি কি একধরণের স্থানধারক?


3
একটি ছোট বিবরণ উল্লেখ -করতে হবে: কমান্ডের শেষে থাকা দরকার নেই। উদাহরণস্বরূপ: ls -l | diff - /old_ls_output.txt
manatwork

উত্তর:


82

এই ক্ষেত্রে, এর অর্থ 'স্ট্যান্ডার্ড ইনপুট'। এটি কোনও সফ্টওয়্যার দ্বারা ব্যবহৃত হয় (উদাঃ tar) যখন কোনও ফাইল আর্গুমেন্ট প্রয়োজন হয় এবং পরিবর্তে আপনার স্টিডিন ব্যবহার করা প্রয়োজন। এটি শেল কনস্ট্রাক্ট নয় এবং এটি আপনি যে প্রোগ্রামটি ব্যবহার করছেন তার উপর নির্ভর করে। সন্দেহ থাকলে ম্যানপেজটি পরীক্ষা করে দেখুন!

এই উদাহরণে, স্ট্যান্ডার্ড ইনপুটটি -fবিকল্পের পক্ষে যুক্তি । -সমর্থিত নয় এমন ক্ষেত্রে আপনি tar xvf /proc/self/fd/0বা এর মতো কিছু ব্যবহার করে দূরে সরে যেতে পারেন tar xvf /dev/stdin(পরেরটি বিভিন্ন ক্ষেত্রে ব্যাপকভাবে সমর্থিত)।

সর্বজনীনভাবে 'স্ট্যান্ডার্ড ইনপুট' বোঝার জন্য এটির উপর নির্ভর করবেন না। যেহেতু এটি শেল দ্বারা ব্যাখ্যা করা হয়নি, তাই প্রতিটি প্রোগ্রাম এটি যেমন খুশি তাই মোকাবেলা করতে মুক্ত। কিছু ক্ষেত্রে এটি স্ট্যান্ডার্ড আউটপুট বা সম্পূর্ণ আলাদা কিছু: suএটিতে 'একটি লগইন শেল শুরু করুন' বোঝায়। অন্যান্য ক্ষেত্রে, এটি মোটেই ব্যাখ্যা করা হয় না। পেশী মেমরি আমাকে নামকরণের জন্য বেশ কয়েকটি ফাইল তৈরি করতে বাধ্য করেছে -কারণ কিছু প্রোগ্রামের কিছু সংস্করণ আমি ড্যাশ বুঝতে পারি নি।


4
STDOUTপ্রসঙ্গের উপর নির্ভর করে এর অর্থও হতে পারে ।
বাহামাত

3
এবং চমকপ্রদ অন্য কিছু, যেমন এটি ব্যাখ্যা করা পৃথক প্রোগ্রামগুলির উপর নির্ভর করে।
অ্যালেক্সিয়স

5
/dev/stdinবা /dev/stdoutআপনি যদি সত্যই ইনপুট / আউটপুট স্ট্রিম চান তা ব্যবহার করা যেতে পারে। মনে রাখবেন যে এটি একটি স্ট্রিম, প্রোগ্রামগুলি যে কোনও ফাইলের সন্ধান করতে চায় এটির সাথে ঠিক মতো কাজ করতে পারে না -(যেমন ffmpeg)
লেকেনস্টেইন

3
ক্ষেত্রে bash, হাইফেন হয় শেল ব্যাখ্যা। দেখুন অধ্যায় 3. বিশেষ অক্ষর - উন্নত ব্যাশ-স্ক্রিপ্টিং গাইড , তারপর "stdin বা stdout- এ থেকে / ফেরৎ" লেখা [ড্যাশ] বা অনুসন্ধান। bashআপনি ব্যবহার করে কোনও ফাইলের নাম আশা করে হাইফেন ব্যবহার করতে পারেন। এটি <| এর একটি সুস্পষ্ট পরিপূরক > আইএমএইচও
বিএসডি

4
আমি নিশ্চিত নই যে এটাই ঘটনা। প্রথমে catহ্যান্ডলগুলি -(ম্যানপেজটি পরীক্ষা করুন)। একটি শেল অন্তর্নির্মিত সংস্করণ হতে catপারে বা নাও পারে তবে এটি পুরো শেলটি কঠোরভাবে নয়। এছাড়াও, যদি শেলটি পরিচালনা করা হয় তবে -আপনি প্রতিধ্বনি বলতে পারেন -এবং এটি অন্য কোনও ক্ষেত্রে প্রসারিত হবে। পরিবর্তে, এটি কেবল একটি ড্যাশ প্রতিধ্বনি দেয় (না /dev/stdinবা /proc/self/fd/0)। এবং echo test > -কেবল একটি ফাইল বলা হয় যা -এটি স্পষ্টভাবে এটি হ্যান্ডেল করে না creates ওহ, এবং আপনার তালিকাভুক্ত পৃষ্ঠাটি শেল দ্বারা পরিচালিত হ'ল বলে না , এটিতে আপনি এটি ব্যবহার করতে পারবেন catএবং diffউভয়ই স্পষ্টভাবে ড্যাশ বোঝে।
অ্যালেক্সিয়াস

13

এই ক্ষেত্রে, এটি -আসলে বেশ অকেজো, ধরে নিয়ে আপনি লিনাক্স চালাচ্ছেন:

জিএনইউ টার (লিনাক্সের সংস্করণ) স্ট্যান্ডার্ড ইনপুট থেকে এটির ইনপুট গ্রহণ করে। আপনি যদি এই আচরণটি না চান এবং ফাইলের নাম কমান্ড লাইন আর্গুমেন্ট হিসাবে পাস করতে চান তবে আপনাকে পতাকাটি নির্দিষ্ট করতে হবে f:

tar xf filename

সুতরাং এই হিসাবে একই

tar x < filename

অথবা, যদি আপনার উদাহরণ হিসাবে ইনপুটটি জিপ করা থাকে:

gzip -dc filename | tar x

fএখানে পতাকাটি মোটেও নির্দিষ্ট করা অর্থবহ নয়, তবে এটি নির্দিষ্ট করা হওয়ায় ফাইলের নামটি -স্ট্যান্ডার্ড ইনপুট থেকে পড়তে চাইছে তা বোঝাতে (অন্য উত্তর দেখুন) দেওয়া দরকার। সুতরাং, পুনরাবৃত্তি করতে, এটি অনর্থক এবং কিছুটা অদ্ভুত।

তদতিরিক্ত, উপরের লাইনটি সরল করা যেতে পারে কারণ পতাকাটি gzipউল্লেখ করে জিএনইউ ট্যারে নিজের মাধ্যমে ইনপুট প্রবাহিত করতে বলা যেতে পারে z:

tar xfz filename

- gzipস্পষ্টভাবে কল করার দরকার নেই ।


1
দ্রষ্টব্য: যে না tarগেছে zবিকল্প।
লাইওরি

2
লিনাক্স ব্যতীত বেশিরভাগ ওএসের tartapeতিহাসিক কারণে প্রথম টেপ ড্রাইভে ডিফল্ট থাকে।
গিলস

1
@ গিলস এবং বিএসডি, এবং ওএস এক্স,…। কিন্তু আমি কৌতুহলী: কয়েকটি পুরাতন কারুরই ছাড়া কি অন্যান্য সিস্টেমের তখনও একই রকম সংস্করণ (কি ব্যবস্থা কারুরই ছাড়া অন্য এমনকি না ব্যবহার আছে একটি টেপ ড্রাইভ)?
কনরাড রুডলফ

1
@ কনরাডরুডল্ফ তিনটি বড় বিএসডিই একটি টেপ ড্রাইভে ডিফল্ট ( নেটবিএসডি .0.০ এবং ওপেনবিএসডি ৫.১ /dev/sa0এ ফ্রিবিএসডি 9.0 এ /dev/rst0)। এআইএক্স 7.1 এর ডিফল্ট /dev/rmt0। MINIX3 এ ডিফল্ট /dev/sa0। (আমি প্রতিটি ক্ষেত্রে সর্বশেষ ওএস সংস্করণ পরীক্ষা করেছি, এগুলি "পুরানো মেনফ্রেমস" নয়।) সোলারিস একটি ফাইলের মাধ্যমে কনফিগারযোগ্য /etc, যা আমি টেপ ড্রাইভে ডিফল্ট বলে মনে করি। জিএনইউ টার, শিলিং টার, ওএসএক্স এবং ব্যাসিবক্স ডিফল্ট স্টিডিন / স্টাডাউটে।
গিলস

1
@ গিলস - আমি স্পষ্ট কারণে দ্বিতীয় টেপ ড্রাইভে tarডিফল্ট হয়ে পুনরায় কম্পাইল করেছি । :)
ডেভিড হার্কনেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.