একাধিক কমান্ড পাল করতে


12
flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'

flockউপরের উদাহরণ হিসাবে আমি কীভাবে একাধিক কমান্ড পাস করব ?

আমি যতদূর বুঝতে পেরেছি, flockবিভিন্ন পতাকা লাগে (এক্সক্লুসিভের জন্য -x, টাইমআউটের জন্য), তারপরে ফাইলটি লক করতে হবে এবং তারপরে চালানোর জন্য আদেশটি নিবে। আমি নিশ্চিত না যে কীভাবে আমি এই ফাংশনে দুটি কমান্ড পাস করব (লক করা ফাইলের বিষয়বস্তুগুলির সাথে ভেরিয়েবল সেট করুন এবং তারপরে এই ফাইলটি বৃদ্ধি করুন)।

এখানে আমার লক্ষ্য হ'ল প্রতিবার স্ক্রিপ্ট counter.txtফাইল অ্যাক্সেস করার চেষ্টা করার সাথে সাথে কোনও ফাইলকে লক করে কিছুটা পারমাণবিক বৃদ্ধি তৈরি করা ।

উত্তর:


8

একটি শেল স্পষ্টভাবে চাওয়া।

flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'

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

new_counter=$(flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) | tee ~/counter.txt')

দুর্দান্ত, অনেক অনেক ধন্যবাদ! আপনি যে ব্যাখ্যা দিয়েছেন তা অবশ্যই আমাকে আরও এক ঘন্টা মাথা ব্যাথা থেকে বাঁচিয়েছিল
d -_- b

4

অথবা আপনি একটি ফাইল বর্ণনাকারী ঝাঁকুন করতে পারেন

exec {counterfd}<~/counter.txt
flock -x -w 5 "$counterfd"
COUNTER=$(cat ~/counter.txt)
COUNTER=$(( COUNTER +1 ))
echo "$COUNTER" >~/counter.txt
exec {counterfd}<&-

সাবস্কেল ভিত্তিক পদ্ধতির বিপরীতে আপনাকে সরাসরি কাউন্টার ভেরিয়েবলটি ব্যবহার করার অনুমতি দেওয়ার সুবিধাও রয়েছে।


আপনি দয়া করে ব্যাখ্যা করবেন exec {counterfd}? নিজস্বভাবে, ডেবিয়ান ত্রুটিগুলি not found, তবে এটি পুনঃনির্দেশের সাথে 0 প্রদান করে। খুব অদ্ভুত.
স্টিভ অ্যালমন্ড

2

flockটুল একটু ব্যবহার করতে চতুর এবং man পৃষ্ঠা চমত্কার ছোট। ম্যান পৃষ্ঠাটি এই সরঞ্জামটি ব্যবহারের তিনটি উপায় সরবরাহ করে:

  • flock [options] <file|directory> <command> [command args]
  • flock [options] <file|directory> -c <command>
  • flock [options] <file descriptor number>

এই প্রশ্নটি যেভাবে বলা হয়েছে তা আমি অবশ্যই তৃতীয় রূপটি ব্যবহার করব flock। আপনি যদি ম্যান পৃষ্ঠায় আরও নীচে যান তবে flockকয়েকটি উদাহরণ রয়েছে যা তৃতীয় রূপটি ব্যবহারের জন্য সঠিক বাক্য গঠন দেখায়:

#!/bin/bash
(
 flock -n 9 || exit 1
 echo "commands executed under lock..."
 echo "go here..."
) 9>/tmp/mylockfile

আমি যোগ #!/bin/bash

আমি এই ফর্মটি সফলভাবে ব্যবহার করেছি flock

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