উত্তর:
ব্যবহার mktemp -d
। এটি একটি এলোমেলো নাম সহ একটি অস্থায়ী ডিরেক্টরি তৈরি করে এবং নিশ্চিত করে যে ফাইলটি ইতিমধ্যে বিদ্যমান নেই। ডিরেক্টরিটি যদিও এটি ব্যবহার করার পরে মুছে ফেলা উচিত remember
আরও দৃ solution় সমাধানের জন্য আমি নীচের মতো কিছু ব্যবহার করি। স্ক্রিপ্টটি প্রস্থান করার পরে টেম্প দির সর্বদা মুছে ফেলা হবে।
ক্লিনআপ ফাংশন EXIT
সিগন্যালে কার্যকর করা হয় । এটি গ্যারান্টি দেয় যে ক্লিনআপ ফাংশনটি সর্বদা ডাকা হয়, এমনকি স্ক্রিপ্টটি কোথাও থেকে যায়।
#!/bin/bash
# the directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# the temp directory used, within $DIR
# omit the -p parameter to create a temporal directory in the default location
WORK_DIR=`mktemp -d -p "$DIR"`
# check if tmp dir was created
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
echo "Could not create temp dir"
exit 1
fi
# deletes the temp directory
function cleanup {
rm -rf "$WORK_DIR"
echo "Deleted temp working directory $WORK_DIR"
}
# register the cleanup function to be called on the EXIT signal
trap cleanup EXIT
# implementation of script starts here
...
এখান থেকে বাশ স্ক্রিপ্টের ডিরেক্টরি ।
বাশ ফাঁদ ।
cleanup
করবে !
mktemp
ব্যর্থ হয়, WORK_DIR
খালি হবে, যার অর্থ হ'ল কমান্ডটি rm -rf
কোনও যুক্তি ছাড়াই থাকবে। আমি ফ্রিবিএসডি ব্যবহার করি না তবে আমি rm -rf
সমান হয়ে rm -rf .
TMPWORKDIR=$(basename 'mktemp -d -p /tmp/git/')
এবং তারপরে ২ rmdir /tmp/git/"${TMPWORKDIR}"
। যদি ভেরিয়েবলটি এখন খালি থাকে তবে আপনি এখনও /tmp/git/
পুরো সিস্টেমে না ফিরে ফিরে যাবেন । উত্তরে এরকম কিছু বিবেচনা করুন এবং আমি আনন্দের সাথে সম্মত হই। ;)
এটির জন্য আমার প্রিয় ওয়ান-লাইনার
cd $(mktemp -d)
rm $(pwd)
? : পি
pushd $(mktemp -d)
...popd
rm -r $(pwd)
rm -r $(pwd)
। অস্থায়ী ডিরেক্টরি নির্মাণ যেকোন কারণে ব্যর্থ হওয়ার সম্ভাবনাটি বিবেচনা করুন (সম্ভবত / টিএমপি ফাইল সিস্টেম পূর্ণ হয়েছে বা কেবল একটি ত্রুটির কারণে পড়ার পুনঃস্থাপন করা হয়েছে?); তারপর cd $(mktemp -d)
নির্ণয় করা হবে cd
যা ব্যবহারকারীর হোম ডিরেক্টরি, যা পরবর্তীতে মুছে ফেলা হবে পরিবর্তিত হয়।
if pushd $(mktemp -d || echo BADMPDIR); then ........ ; rm -r $(pwd); popd; fi
নিম্নলিখিত স্নিপেট নিরাপদে একটি অস্থায়ী ডিরেক্টরি ( -d
) তৈরি করবে এবং এর নামটি মধ্যে সংরক্ষণ করবে TMPDIR
। ( TMPDIR
ভেরিয়েবলের একটি উদাহরণ ব্যবহারের পরে কোডটিতে প্রদর্শিত হয় যেখানে এটি সম্ভবত ব্যবহৃত সংশোধনযোগ্য মূল ফাইলগুলি সংরক্ষণ করার জন্য ব্যবহৃত হয়))
প্রথম trap
লাইনটি exit 1
নির্দিষ্ট সংকেতগুলির যে কোনওটি প্রাপ্ত হলে কমান্ড কার্যকর করে । দ্বিতীয় trap
লাইনটি $TMPDIR
অন প্রোগ্রামের প্রস্থান (সাধারণ এবং অস্বাভাবিক উভয় ) মুছে ফেলে (পরিষ্কার করে )। আমরা এই ফাঁদগুলি অজানা অবস্থায় mkdir -d
প্রস্থান ফাঁদটি দুর্ঘটনাক্রমে কার্যকর করতে এড়াতে পেরেছি কিনা তা যাচাই করার পরে আমরা এই ফাঁদগুলি শুরু করি $TMPDIR
।
#!/bin/bash
# Create a temporary directory and store its name in a variable ...
TMPDIR=$(mktemp -d)
# Bail out if the temp directory wasn't created successfully.
if [ ! -e $TMPDIR ]; then
>&2 echo "Failed to create temp directory"
exit 1
fi
# Make sure it gets removed even if the script exits abnormally.
trap "exit 1" HUP INT PIPE QUIT TERM
trap 'rm -rf "$TMPDIR"' EXIT
# Example use of TMPDIR:
for f in *.csv; do
cp "$f" "$TMPDIR"
# remove duplicate lines but keep order
perl -ne 'print if ++$k{$_}==1' "$TMPDIR/$f" > "$f"
done
-d
ডিরেক্টরি জন্য চেক। ২) এই সংকেতগুলির জন্য ইতিমধ্যে সমাপ্তি ডিফল্ট।
mktemp -d -t <prefix>