একটি লাইন উপস্থিত না থাকলে পারমাণবিকভাবে এটি তৈরি করতে ওয়ান-লাইনারকে বাশ করুন


9

আমি বাশ ওয়ান-লাইনার চাই যা অস্তিত্বের সাথে একটি ফাইল তৈরি করে যদি এটি উপস্থিত না থাকে। এর অর্থ মূলত "যদি ফাইলের অস্তিত্ব না থাকে তবে এটি তৈরি করুন" তবে এটি নিশ্চিত করা এবং ফাইল তৈরি করার মধ্যে অন্য কেউ যদি ছোট স্থানটিতে ফাইল তৈরি করতে না পারে তা নিশ্চিত করে।


দুঃখিত, আমি 'পরমাণু' হিসাবে 'স্বয়ংক্রিয়ভাবে' পড়েছি। আমি আমার উত্তর মুছে ফেলেছি।
অ্যারন কোপালি

উত্তর:


6

বিভিন্ন মন্তব্য এবং [এসও] এর লিঙ্কগুলির একটি উত্তর চুরি করা । দেখে মনে হচ্ছে এমন একটি পসিক্স অনুগত পদ্ধতি রয়েছে যা এতে mkdirনিচে আমার মূল উত্তরে উল্লিখিত না থাকায় জড়িত না

set -o noclobber # or set -C
{ > file ; } &> /dev/null

এই ফাইলটি পুনঃনির্দেশ 0 বা রিয়েল ফিরতে পুনরায় প্রেরণ করে এবং যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে শূন্য-বহির্গমন দেয় returns


আসল উত্তর

আপনাকে ব্যবহার করতে হবে mkdir- এটি পারমাণবিক, হয় ডিরেক্টরি তৈরি হয় এবং আপনি চালিয়ে যেতে পারেন বা এটি তৈরি হয় না যাতে আপনি যথাযথ ব্যবস্থা গ্রহণ করেন।

অবশ্যই, mkdirকোনও ফাইল তৈরি করে না তবে একবার আপনি যদি জানেন যে আপনার ডিরেক্টরিতে একচেটিয়া অ্যাক্সেস রয়েছে তখন আপনি এটিতে চান ফাইলটি তৈরি করতে পারেন।

এক লাইনার হিসাবে - আমি এটি আপনার কাছে রেখে দেব। ব্যক্তিগতভাবে আমি কয়েক লাইনে এটি লিখতাম, কারণ এটি আরও রক্ষণাবেক্ষণযোগ্য হবে।


কিন্তু থেকে noclobber stackoverflow.com/q/13828544/1207760 আর কি ওপি চায়।
Law29

নোক্লোবার সাধারণভাবে একটি ভাল উত্তর। তবে এটি ksh88 এর জন্য কাজ করে না।
jrw32982 মনিকা

1
@ জনউইয়ার্সবা কিন্তু প্রশ্ন বাশ সম্পর্কে।
দোলা

@ দারুণ হ্যাঁ তবে উত্তরে পসিক্সের উল্লেখ রয়েছে যা কেউ বোঝাতে পারে যে উত্তরটি অন্যান্য শেলগুলির জন্য প্রযোজ্য। Ksh88 এখনও কিছু সার্ভারের স্ট্যান্ডার্ড শেল।
jrw32982

0

এটি ফাইল বা ডিরেক্টরি? যদি ফাইল হয় তবে আপনি সাধারণ কমান্ড টাচ ব্যবহার করতে পারেন - যদি ফাইলটি বিদ্যমান থাকে তবে এটি কেবল সর্বশেষ অ্যাক্সেসের সময় পরিবর্তন করে। যদি ফাইল বিদ্যমান না থাকে তবে তৈরি হয়।


0

আর একবার চেষ্টা কর. lnপরীক্ষা-এবং-সেট কার্যকারিতা প্রদান করে।

touch lock.$$.tmp
if ln lock.$$.tmp lock.dat 2>/dev/null
then
    echo "File is mine"
else
    echo "Test and set failed"
fi
rm -f lock.$$.tmp

0

আপনি যদি ফাইল নামটির বিষয়ে চিন্তা না করেন তবে আপনি এই কার্যটি কোনও ইউটিলিটিতে অর্পণ করতে পারেন, উদাহরণস্বরূপ mktemp

Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive `X's in last component.
If TEMPLATE is not spec‐ified, use tmp.XXXXXXXXXX, and --tmpdir is 
implied.  Files are created u+rw, and directories u+rwx, minus umask
restrictions.

আবাহন:

filename=$(mktemp)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.