কোনও স্ক্রিপ্টে, আমি কীভাবে এটি নির্ধারণ করতে পারি যে কোনও ফাইল বর্তমানে অন্য প্রক্রিয়া দ্বারা লিখিত হয়েছে কিনা?


21

আমি স্ক্রিপ্টিং বাশ করাতে খুব নতুন, তাই আমি ভুল গাছটি ছাঁটাই করছি, তবে এখানে আমার বর্তমান অবস্থা:

একটি স্ক্রিপ্টে আমি কটূক্তি শুরু করি ; একটি বাজেট পিডিএফ রূপান্তর করতে

দেখে মনে হচ্ছে যে সফিফাইস নিজেকে স্ক্রিপ্টের প্রক্রিয়া থেকে আলাদা করে দেয় এবং নিজের কাজটি করতে ঘুরে বেড়ায় .. ঠিক আছে, ঠিক আছে; জিইউআই অ্যাপ্লিকেশনগুলি সেগুলি করতে ঝোঁক ...

তবে নতুন পিডিএফ সম্পূর্ণ লেখা না হওয়া পর্যন্ত আমাকে অপেক্ষা করতে হবে , কারণ আমার পরবর্তী পদক্ষেপে সেই নতুন পিডিএফ প্রসেসিং জড়িত ।

(যতদূর আমি জানি) আমি সফিফিসের প্রসেস-আইডি ব্যবহার করতে পারি না, কারণ এটি আমার স্ক্রিপ্ট শুরুর আগেই এটি একটি চলমান প্রক্রিয়া হতে পারে: যেমন। আর কোনও সম্পর্কযুক্ত নথি / উপস্থাপনা / স্প্রেডশিটের জন্য সাধারণ জিইউআই ক্রিয়াকলাপের জন্য সফিফিস ইতিমধ্যে উন্মুক্ত থাকতে পারে।

আমার পক্ষে বিষয়টির বিষয়টি হ'ল আমি এগিয়ে যাওয়ার আগে নতুন পিডিএফের লেখা চূড়ান্ত করতে হবে ...

"লিখন" মোডে কোনও ফাইল যখন আর কোনও প্রক্রিয়াতে খোলা থাকে না তা নির্ধারণ করার কোনও উপায় আছে ? ...

উত্তর:


25

lsof | grep /absolute/path/to/file.txtকোনও ফাইল খোলা আছে কিনা তা দেখতে আপনি ব্যবহার করতে পারেন। যদি ফাইলটি খোলা থাকে তবে এই কমান্ডটি 0 টি স্থিতি ফিরিয়ে দেবে, অন্যথায় এটি 256 (1) এ ফিরে আসবে।

সচেতন হোন যে এই কমান্ডটি দ্বিতীয় সময় নেবে যেহেতু সাধারণত যে কোনও সময় প্রচুর ফাইল খোলা থাকে।

lsof -c geditউদাহরণস্বরূপ, কোন ফাইলের জিডিট খোলা হয়েছে তা দেখতে আপনি ব্যবহার করতে পারেন। আউটপুটটিকে একটি প্রক্রিয়াতে সীমাবদ্ধ করা কার্যকরভাবে কার্যকর করার মতো সময় নির্ধারণের সময়কে হ্রাস করবে।

অপেক্ষা করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে:

#!/bin/bash

while :
do
    if ! [[ `lsof -c python3.2 | grep test.py` ]]
    then
        break
    fi
    sleep 0.5
done
echo "done"

'Pyhton3.2' একটি প্রক্রিয়া 'test.py' ফাইলটি পেয়ে গেলে এটি চলে runs ফাইলটি বন্ধ হওয়ার সাথে সাথে এটি 'প্রতিধ্বনিত' হয়ে চলে যায় এবং প্রস্থান করে।

আমি সেখানে 'ঘুম ০.০' রেখেছি যাতে লুপ এতটা খারাপভাবে সিপিইউতে জাগে না। অন্যথায় এটি 100% সিপিইউ ব্যবহার করবে।

বোনাস পিডিএফ থেকে বৈকল্পিকের পক্ষে সহজ উপায় বলে মনে হচ্ছে:

এই সুন্দর টিপটির জন্য ওও ফোরামে স্ক্লস 19 এফআরকে ধন্যবাদ আপনি কমান্ড লাইন থেকে ওপেন unoconv -f pdf input.odtঅফিসে লেখক ফাইলগুলিকে পিডিএফে রূপান্তর করতে পারেন Unoconv পেতে, কেবল sudo apt-get install unoconvটার্মিনালে চালান । (rhyshale.wordpress.com এর rhyshale)


লুপ অবধি এটিকে মুড়িয়ে রাখুন এবং আপনার একটি চুক্তি হয়েছে।
নিক পাসকুচি

এটা করো. :-) আমি আশা করি এটি ভয়ানক স্টাইল নয় - সেরা অভ্যাসগুলি পড়তে বিরক্ত করেননি। এটি যাইহোক ভাল কাজ করে।
স্টেফানো প্যালাজো

ধন্যবাদ স্টেফানো ... হ্যাঁ, এটি কাজ করে ... সুতরাং এটি একটি ভাল এবং সঠিক উত্তর ... এটি একটি দিকের নোট, এটি হাইলাইট করেছে যে কফফলে যা ঘটছে তা আমার চিন্তাভাবনা মতো নয় .. মনে হচ্ছে একটি অস্থায়ী ফাইল তৈরি হচ্ছে এবং চূড়ান্ত ফাইলটি (সম্ভবত / সম্ভবত) সম্পূর্ণরূপে পুনরায় নামকরণ করা হয়েছে ... সুতরাং আমি এখন এটি দেখছি ... এই ক্ষেত্রে, আমার কেবল তার * অস্তিত্বের জন্য অপেক্ষা করতে হতে পারে ... ... এবং ইউনোকভের লিঙ্কটির জন্য ধন্যবাদ .. আমি এটিতে সন্ধান করব .. (সামগ্রিকভাবে, আমি পিডিএফকে একাধিক .. রূপান্তর করছি প্রতি পৃষ্ঠায় একটিতে)
পিটার.ও

@ fred.bear অপেক্ষা করতে পর্যন্ত একটি ফাইল বিদ্যমান, এই সঙ্গে যদি-বিবৃতি প্রতিস্থাপন করুন: if [ -f test.odf ]। (বাশ স্ক্রিপ্টটি কখনও কখনও এত ক্রিপ্টিক হতে পারে ...)
স্টেফানো প্যালাজো

6
এর lsof -- /path/to/fileপরিবর্তে চেষ্টা করুন grep'ইনগ
রুবিটায়রোয়ারডাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.