তার এবং তার মূল অক্ষর: এটি কোনও বাগ বা বৈশিষ্ট্য?


18

আমি এই দুটি আদেশের পার্থক্য জিজ্ঞাসা করতে অবাক হয়েছি (অর্থাত্ কেবল তাদের বিকল্পগুলির ক্রমটি আলাদা):

  1. tar -zxvf foo.tar.gz
  2. tar -zfxv foo.tar.gz

প্রথমটি পুরোপুরি দৌড়েছিল তবে দ্বিতীয়টি বলেছেন:

tar: You must specify one of the `-Acdtrux' or `--test-label'  options
Try `tar --help' or `tar --usage' for more information.

এবং সঙ্গে আলকাতরা --test-labelএবং -zfxvবললঃ

tar (child): xv: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

তারপরে আমি টার ম্যানুয়ালটির দিকে তাকিয়ে উপলব্ধি করেছিলাম যে সমস্ত উদাহরণ -fশেষ পর্যন্ত স্যুইচ ব্যবহার করছে !!

আফ্রিকার এই সীমাবদ্ধতার দরকার নেই, নাকি আছে ?! কারণ আমার মতে স্যুইচগুলি অর্ডারমুক্ত হওয়া উচিত।


2
@ কমান্ড লাইনে আপনার "সংশোধন" খুব শীঘ্রই তিনি কোন আদেশটি টাইপ করেছেন তা অস্পষ্ট করে দিয়েছে। একটি শীর্ষস্থানীয় ড্যাশ ভিন্ন আর্গুমেন্ট পার্সার ব্যবহার করতে জিএনইউ টারের আচরণকে পরিবর্তন করে। কোনও ড্যাশ (এবং এইভাবে প্রথাগত যুক্তি পার্সার) ব্যবহার না করে দ্বিতীয় কমান্ডটি কাজ করবে।
এলোমেলো 832

ওয়েব সিস্টেম থেকে ব-দ্বীপ প্রিন্টআউট আমাকে জানিয়েছিল যে আপনি বা অন্য কেউ এর আগে - যুক্ত করেছিলেন, সুতরাং সিস্টেমটি আমাকে যা বলেছিল তা ওপি থেকে মেলানোর জন্য আমি আবার এটিকে সরিয়েছি। তবে আপনি যদি ঠিক থাকেন তবে gtar option parsingগেটার ব্যবহার না করার জন্য আপনি আর একটি কারণ আবিষ্কার করেছেন।
ধীরে ধীরে

1
-fফাইলের নামটি অনুসরণ করবে বলে প্রত্যাশা করে। আপনার দ্বিতীয় সংস্করণে, আপনি নির্দিষ্ট করেছেন -fxv, যা - তারার জন্য - তার অর্থ ফাইলের নাম "xv"।
রল্ফ

1
বাধ্যতামূলক এক্সকেসিডি
পাভেল

উত্তর:


11

আপনার ত্রুটির বার্তার দিকে তাকানো, এটি স্পষ্ট যে আপনি ব্যবহার না করে tarবরং করেছিলেন gtar

সাধারণভাবে এটি জিনিসগুলি বুঝতে সাহায্য করতে পারে:

  • tarসাধারণত সর্বদা একটি ফাইল আর্গুমেন্ট প্রয়োজন। যদি এটি অনুপস্থিত থাকে তবে এটি সিস্টেমের ডিফল্ট আসল টেপ ডিভাইসে / থেকে / পড়তে পারে। starডিফল্টরূপে stdin / stdout ব্যবহার করতে 1982 সালে এটি পরিবর্তন করে এবং কিছু অন্যান্য টার বাস্তবায়ন (যেমন gtar) সম্প্রতি এই উদাহরণ অনুসরণ করেছে।

  • tarটার কমান্ডের ক্ষেত্রে -ডাকা বিকল্পগুলির জন্য নেতৃস্থানীয় প্রয়োগ করে না key letters। কিছু বাস্তবায়ন পরে -ব্যবহারকারীদের সুবিধার্থে কোনও অপ-কি কী চিঠি হিসাবে যুক্ত হয়েছিল তবে আপনি এটির উপর নির্ভর করতে পারবেন না।

  • পথ tarতার আর্গুমেন্ট parses (বিশেষ করে আর্কাইভ ফাইল যুক্তি) অত্যন্ত ঝুঁকিপূর্ণ। আমি অনেক টার আর্কাইভ দেখেছি যা সংরক্ষণাগুলির মধ্যে থাকা এমন একটি ফাইলকে ধ্বংস করে দেয় কারণ সম্পর্কিত ফাইল আর্গুমেন্টটি টার সংরক্ষণাগার ফাইল হিসাবে নেওয়া হয়েছিল। starএই কারণে (যদি স্থানীয়ভাবে বলা হয় star) "চ" কে অন্যান্য বিকল্পের সাথে সংযুক্ত করার অনুমতি দেয় না। যদি starএটি বলা হয় তবে tarএটি কমান্ড লাইনটির সাথে সামঞ্জস্যতা প্রয়োগ করে tar, তবে এখনও "f" কী বর্ণের জন্য যুক্তিটি ভিন্নভাবে পরিচালনা করে: আর্গুমেন্টটি কেবল তখনই অনুমোদিত হয় যদি এটি কোনও আসল ডিভাইস ফাইলকে বোঝায় বা যখন (লিখিত মোডে) ফাইলটি উপস্থিত না থাকে only ।

আমি ঝুঁকিপূর্ণ মূল টার কমান্ড লাইন এড়াতে এবং বরং আপনি যে আধুনিক নিরাপদ কমান্ড লাইন সিনট্যাক্সটি পেয়েছেন তা ব্যবহার করার পরামর্শ দিচ্ছি star

সমস্যাযুক্ত কমান্ড লাইন সিনট্যাক্সের কারণে tar, tar wars1990 এর দশকের গোড়ার দিকে তথাকথিত ছিল । ফলস্বরূপ, প্রোগ্রাম pax(টার যুদ্ধগুলিতে "শান্তি" এর জন্য লাতিন) তৈরি এবং মানক করা হয়েছিল। paxতবে এর সিনট্যাক্সটি কম ঝুঁকিপূর্ণ হলেও টার সিনট্যাক্সের চেয়ে স্বজ্ঞাত হিসাবে জনপ্রিয়তা অর্জন করতে পারেনি। আরও একটি সমস্যা হতে পারে এটি gpaxকম-বেশি অব্যক্ত।


3
টার যুদ্ধ শেষ। জন্টার জিতেছে।
জোশুয়া

2
আপনি যদি ঠিকই থাকেন তবে সমস্ত টার বাস্তবায়নগুলি কেন বৈশিষ্ট্যগুলি অনুলিপি করে star?
schily

1
বিটিডাব্লু: টারের যুদ্ধগুলি tarএবং এর মধ্যে একটি যুদ্ধ হয়েছে cpio
ভালভাবে

2
ঠিক আছে, তাই মনে হয় star's -f"$file"এছাড়াও (ছাড়াও হয় ind) দিয়ে শুরু ফাইলের নাম নিয়ে একটি সমস্যা =। সুতরাং এটি একটি -f="$file"বা হয় লিখতে হবে -f "$file"। আমি নিশ্চিত নই যে আমি আপনার তারা বিকল্পটি পার্সিংকে নিরাপদ বা আধুনিক বলব ।
স্টাফেন চেজেলাস

3
-longশৈলীর দীর্ঘ বিকল্পগুলি সংক্ষিপ্ত -xyzসংক্ষিপ্ত বিকল্পগুলির সাথে বেমানান বা -xarg। এ কারণেই এক্স 11 স্টাইলের দীর্ঘ বিকল্পগুলির জন্য সংক্ষিপ্ত বিকল্পগুলি পৃথক ( -x -yনা, নয় -xy) এবং বিকল্প যুক্তিগুলি পৃথক যুক্তিতে থাকতে হবে ( xterm -n fooনয় xterm -nfoo) require সংক্ষিপ্ত বিকল্পগুলির সাথে সম্ভাব্য বিভ্রান্তি দূর করতে এবং কেন জিএনইউ-স্টাইলের দীর্ঘ বিকল্পগুলি একটি আরও ভাল নকশা And আপনি যদি ওভারল্যাপগুলি এড়াতে খুব সতর্ক হন তবেই আপনার -fooসাথে সহাবস্থান থাকতে -x -y -xyপারে।
স্টাফেন চেজেলাস

55

স্যুইচগুলির ক্রম বিনামূল্যে, তবে -fএকটি বাধ্যতামূলক যুক্তি রয়েছে যা ফাইলটি tarপড়বে / লিখবে।

আপনি করতে পারেন

tar -zf foo.tar.gz -xv

এবং এটি কার্যকর হবে এবং আপনার সুইচগুলির একটি নির্দিষ্ট-নির্দিষ্ট ক্রমের প্রয়োজন আছে।

এইভাবে সমস্ত কমান্ডের যে বিকল্পগুলির সাথে যুক্তি রয়েছে তা কাজ করে।


5
টার অন্যান্য কমান্ডের মতো কাজ করে না কারণ এটি অনেক বেশি পুরানো কমান্ড লাইন পার্সার ব্যবহার করে - একই জিনিস যা "আর" কমান্ড এবং পুরানো (প্রাক-পসিক্স) "পিএস" কমান্ডে ব্যবহৃত হয়।
ধীরে ধীরে

1
এর জন্য আপনাকে ধন্যবাদ, নির্বাচিত উত্তরটি পুরোপুরিভাবে হলেও আমাকে বিশেষত সমস্যাটি কী তা দেখার অনুমতি দেয়নি।
বিপরীতে

1
আমি বিশ্বাস করি আপনি এটি হিসাবে এটি ঘোষণা করতে পারেন -f=./myfile, অর্থাত্, চ একটি মান নেয়, এটি পতাকা নয়, এটি একটি ইনপুট।
থারস্মমনার

14

প্রথাগতভাবে, আলকাতরা এর অপশন আছে বেশী বা কম "অর্ডার-মুক্ত" (ক্রম fএবং bঅপশন ব্যাপার না উভয় উল্লিখিত)। শীর্ষস্থানীয় ড্যাশ ব্যবহার করে, জিএনইউ ট্যরকে অন্যান্য কমান্ডের সাথে আরও সুসংগত হিসাবে বিবেচনা করা হয় এমন বিকল্পগুলিকে বিশ্লেষণ করার কারণ হয়, যেখানে একটি বিকল্প নির্দিষ্ট করে যার জন্য একটি আর্গুমেন্টের প্রয়োজন হয় (যেমন ফাইলের নাম যেমন f) বাকী শব্দটি অবিলম্বে গ্রাস করবে, যদি কোনও, তর্ক হিসাবে (traditionতিহ্যগতভাবে, তারার পরবর্তী শব্দটি ফাইলের নাম / ব্লকের আকার হিসাবে ব্যবহৃত হয় fবা bনির্দিষ্ট করা থাকে)। আপনার ক্ষেত্রে এটি ফাইলের নাম হিসাবে "xv" নিয়েছে।

যদিও এই আচরণটি বহনযোগ্যতার জন্য নির্ভর করা যায় না। সর্বাধিক বহনযোগ্যতার জন্য আপনার কোনও ড্যাশ ব্যবহার করা উচিত নয়, সর্বদা fসর্বশেষে রাখা উচিত এবং সর্বদা fএবং ফাইলের মধ্যে একটি স্থান রাখা উচিত । এটি হ'ল একটি সরলিকরণ যা আপনার bবিকল্পের প্রয়োজন হলে বা সাধারণভাবে এটির Cব্যতীত অন্য কোনও বিকল্প (যেমন ) প্রয়োজন হলে ভেঙে যায় f

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


2
নোট করুন যে কিছু বাস্তবায়ন অন্যান্য যুক্তিকে আর্গুমেন্টের সাহায্যে সমর্থন করে (যেমন Cবিএসডি বা জিএনইউ ট্যারে। ধরণের ট্যারি এটিকে -সি হিসাবে সমর্থন করে তবে সি হিসাবে নয়, সকলেই এটিকে সি-হিসাবে সমর্থন করে)।
স্টাফেন চেজেলাস

0

ট্যারে, দ্য - সুইচগুলিকে বহু বছর আগে অবহেলা করা হয়েছে এবং এখন আর প্রয়োজন নেই। টার আসলে আপনাকে বলত কিন্তু এখন আর তা করে না।

ie:
tar zxvf foo.tar.gz
tar zfxv foo.tar.gz

Both of these work fine without the -.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.