'>' সম্পর্কিত সতর্কতা
ইউনিক্স সূচনাপ্রাপ্ত যারা কেবলমাত্র I / O পুনঃনির্দেশ সম্পর্কে শিখেছে ( <
এবং >
) প্রায়শই পছন্দ মতো জিনিসগুলি চেষ্টা করে
কমান্ড ... input_file > the_same_file
অথবা
কমান্ড … < ফাইল > the_same_file
বা, প্রায় সমানভাবে,
বিড়াল ফাইল | কমান্ড …> the_same_file
( grep
, sed
, cut
, sort
, এবং spell
কমান্ড যে মানুষ এই মত নির্মানের ব্যবহার করার জন্য লুব্ধ উদাহরণ।) ব্যবহারকারীদের যে এই পরিস্থিতিতে ফাইল ফলে খালি হয়ে আবিষ্কার বিস্মিত হয়।
অন্যান্য উত্তরে উল্লেখ করা হয়নি বলে মনে হচ্ছে এমন একটি সংক্ষেপ বাশ (১) এর পুনঃনির্দেশ বিভাগের প্রথম বাক্যে লুকিয়ে থাকতে দেখা যাবে :
কমান্ড কার্যকর করার আগে,
শেল দ্বারা ব্যাখ্যা করা একটি বিশেষ স্বরলিপি ব্যবহার করে এর ইনপুট এবং আউটপুট পুনর্নির্দেশ করা যেতে পারে ।
কমান্ডটি কার্যকর হওয়ার আগে শেলটি অনুরোধিত পুনঃনির্দেশ (গুলি) সম্পাদন করে তার উপর জোর দেওয়ার জন্য প্রথম পাঁচটি শব্দটি সাহসী, ত্রিভুজ, আন্ডারলাইন করা, প্রসারিত, ঝলকানি, রঙিন লাল এবং একটি আইকন
দিয়ে চিহ্নিত করা উচিত । এবং মনে রাখবেন
আউটপুট পুনঃনির্দেশের ফলে ফাইলটি… লেখার জন্য খোলা হবে…। ফাইল উপস্থিত না থাকলে, এটি তৈরি করা হয়; যদি এটি বিদ্যমান থাকে তবে এটি শূন্য আকারে কাটা হবে।
সুতরাং, এই উদাহরণে:
sort roster > roster
প্রোগ্রামটি চালু roster
হওয়ার আগে শেল ফাইলটি রচনা করে এটি কেটে দেয় (অর্থাত্, এটির সমস্ত বিষয়বস্তু বাদ দিয়ে) sort
। স্বাভাবিকভাবেই, তথ্য পুনরুদ্ধার করার জন্য কিছুই করা যায় না।
কেউ সম্ভবত নির্বিঘ্নে এটি আশা করে
tr "[:upper:]" "[:lower:]" < poem > poem
আরও ভাল হতে পারে। যেহেতু শেলটি বাম থেকে ডানদিকে পুনঃনির্দেশগুলি পরিচালনা করে, এটি লেখার জন্য এটি খোলার আগে (স্ট্যান্ডার্ড আউটপুট জন্য) এটি poem
পড়ার জন্য ( tr
স্ট্যান্ডার্ড স্ট্যান্ডার্ড ইনপুট জন্য) খোলে। তবে তাতে কোনও লাভ হয় না। যদিও ক্রমের এই ক্রমটি দুটি ফাইল হ্যান্ডেল দেয়, তারা উভয়ই একই ফাইলের দিকে নির্দেশ করে। শেলটি পড়ার জন্য ফাইলটি খুললে, সামগ্রীগুলি এখনও সেখানে থাকে, তবে প্রোগ্রামটি কার্যকর হওয়ার আগে তারা এখনও আঁটসাঁট হয়ে যায়।
তাই এটা সম্পর্কে কি করতে হবে?
সমাধানগুলির মধ্যে রয়েছে:
আপনি যে প্রোগ্রামটি চালাচ্ছেন তার আউটপুট কোথায় যায় তা নির্দিষ্ট করার নিজস্ব, অভ্যন্তরীণ, ক্ষমতা আছে কিনা তা পরীক্ষা করে দেখুন। এটি প্রায়শই একটি -o
(বা --output=
) টোকেন দ্বারা নির্দেশিত হয় । নির্দিষ্টভাবে,
sort roster -o roster
মোটামুটি সমান
sort roster > roster
প্রথম ক্ষেত্রে বাদে sort
প্রোগ্রামটি আউটপুট ফাইলটি খোলে। এবং এটা আউটপুট ফাইল খোলার জন্য যথেষ্ট স্মার্ট পর্যন্ত পর ইনপুট ফাইল (গুলি) সব পড়েছেন।
একইভাবে, অন্তত কিছু সংস্করণে sed
একটি আছে -i
(সম্পাদনা আমার এন স্থান) বিকল্পটি আউটপুট ফিরে ইনপুট ফাইলে লিখতে ব্যবহার করা যেতে পারে (আবার, পরে সমস্ত ইনপুট পড়া হয়েছে)। মত এডিটরস ed
/ ex
, emacs
, pico
, এবং vi
/ vim
ব্যবহারকারী একটি টেক্সট ফাইল সম্পাদনা করতে এবং মূল ফাইল সম্পাদনা পাঠ্য সংরক্ষণ করার অনুমতি দেয়। নোট করুন ed
(কমপক্ষে) অ-ইন্টারেক্টিভভাবে ব্যবহার করা যেতে পারে।
vi
সম্পর্কিত বৈশিষ্ট্য আছে। আপনি যদি টাইপ করেন তবে এটি সম্পাদনা বাফারের সামগ্রীগুলি এতে লিখে , আউটপুটটি পড়বে এবং এটি বাফারে প্রবেশ করবে (মূল বিষয়বস্তুগুলি প্রতিস্থাপন করে)।:%!command
Entercommand
সহজ তবে কার্যকর:
কমান্ড … ইনপুট_ফাইলে > টেম্প_ফায়াল && এমভি টেম্পল_ফিল ইনপুট_ফাইলে
এটির একটি অপূর্ণতা রয়েছে যা যদি input_file
কোনও লিঙ্ক হয় তবে এটি (সম্ভবত) একটি পৃথক ফাইল দ্বারা প্রতিস্থাপন করা হবে। এছাড়াও, নতুন ফাইলটি আপনার মালিকানাধীন থাকবে ডিফল্ট সুরক্ষাগুলির সাথে। বিশেষত, এটি ঝুঁকি বহন করে যে ফাইলটি বিশ্ব-পঠনযোগ্য হয়ে উঠবে, এমনকি যদি আসলটি input_file
না ছিল।
প্রকারভেদ:
command … input_file > temp_file && cp temp_file input_file && rm temp_file
যা এখনও (সম্ভাব্য) temp_file
বিশ্ব-পাঠযোগ্য ছাড়বে leave আর ভালো:
cp input_file temp_file && command … temp_file > input_file && rm temp_file
এগুলি ফাইলের লিঙ্কের স্থিতি, মালিক এবং মোড (সুরক্ষা) সংরক্ষণ করে, দ্বিগুণ আই / ও দ্বিগুণ ব্যয়ে। (আপনি একটি অপশন ব্যবহার করার প্রয়োজন হতে পারে -a
বা -p
উপর cp
বৈশিষ্ট্যাবলী সংরক্ষণ তা জানাও।)
command … input_file > temp_file &&
cp --attributes-only --preserve=all input_file temp_file &&
mv temp_file input_file
(কেবল পঠনযোগ্যতার জন্য পৃথক লাইনে বিভক্ত) এটি ফাইলের মোড সংরক্ষণ করে (এবং আপনি যদি রুট হন তবে মালিক), তবে এটি আপনার নিজের মালিকানাধীন করে তোলে (আপনি যদি রুট না হন) এবং এটিকে একটি নতুন করে তোলে, পৃথক ফাইল।
এই ব্লগটি
(ফাইলগুলির "ইন-প্লেস" সম্পাদনা) পরামর্শ দেয় এবং ব্যাখ্যা করে
m আরএম ইনপুট_ফিল && কমান্ড …> ইনপুট_ফাইল ; input < ইনপুট_ফাইল
এটি প্রয়োজনীয় command
স্ট্যান্ডার্ড ইনপুট প্রক্রিয়া করতে সক্ষম হওয়া প্রয়োজন (তবে প্রায় সমস্ত ফিল্টার পারে)। ব্লগ নিজেই এটিকে একটি ঝুঁকিপূর্ণ কলজ বলে অভিহিত করে এবং এর ব্যবহারকে নিরুৎসাহিত করে। এবং এটি আপনার মালিকানাধীন এবং ডিফল্ট অনুমতি সহ একটি নতুন, পৃথক ফাইল (কোনও কিছুর সাথে লিঙ্কযুক্ত নয়) তৈরি করবে।
মোর্যুটিলস প্যাকেজের একটি কমান্ড রয়েছে sponge
:
কমান্ড … ইনপুট_ফাইল | স্পঞ্জ the_same_file
আরও তথ্যের জন্য এই উত্তর দেখুন ।
এখানে আমার কাছে সম্পূর্ণ অবাক হওয়ার মতো কিছু রয়েছে:
সিনট্যাক্সারর বলেছেন :
[এই সমাধানগুলো অধিকাংশ] শুধুমাত্র পাঠযোগ্য ফাইল সিস্টেম, যেখানে "শুধুমাত্র পাঠযোগ্য" মানে হল আপনার উপর ব্যর্থ হবে $HOME
হবে লিখনযোগ্য, কিন্তু /tmp
করা হবে না -কেবল পঠন (ডিফল্ট অনুসারে)। উদাহরণস্বরূপ, যদি আপনার উবুন্টু থাকে এবং আপনি পুনরুদ্ধার কনসোলটি বুট করেছেন তবে সাধারণত এটি হয়। এছাড়াও, এখানে নথি অপারেটর <<<
সেখানে পারেন কাজ করবে না, এটি প্রয়োজন হিসাবে /tmp
করা / লেখা পড়া
হয়েছে কারণ এটি পাশাপাশি সেখানে একটি অস্থায়ী ফাইল লিখতে হবে।
(সিএফ। এই প্রশ্নের একটি strace
'ডি আউটপুট অন্তর্ভুক্ত )
নিম্নলিখিত ক্ষেত্রে নিম্নলিখিত ক্ষেত্রে কাজ করতে পারে:
তো, প্রশ্ন কী ছিল?
এটি ইউ ও এল-এ একটি জনপ্রিয় বিষয় হয়ে দাঁড়িয়েছে; এটি নিম্নলিখিত প্রশ্নগুলিতে সম্বোধন করা হয়েছে:
… এবং এটি সুপার ব্যবহারকারী বা জিজ্ঞাসা উবুন্টুকে গণনা করছে না। আমি এই উত্তরে উপরের প্রশ্নের উত্তরগুলি থেকে প্রচুর তথ্য একত্রিত করেছি, তবে সমস্ত নয়। (অর্থাত্ আরও তথ্যের জন্য উপরের তালিকাভুক্ত প্রশ্নাবলী এবং তাদের উত্তরগুলি পড়ুন))
PS উপরে বর্ণিত ব্লগটির সাথে আমার কোনও সম্পর্ক নেই ।