কোনও নির্দিষ্ট পাথের দিকে কীভাবে প্রতীকী লিঙ্ক পয়েন্টের লক্ষ্য যাচাই করবেন


16

বাশ স্ক্রিপ্টের মধ্যে, আমি জানি যে আমি কোনও ফাইলটি নিম্নলিখিত সিনট্যাক্সের সাথে প্রতীকী লিঙ্ক কিনা তা পরীক্ষা করতে পারি

if [ -L $path ]

কেউ যদি জানেন যে সেই পথটি যদি কোনও নির্দিষ্ট পথের সাথে যুক্ত করা হয় তবে আমি কীভাবে পরীক্ষা করব? যেমন আমি লক্ষ্য কিনা চেক করতে চান $pathহয় /some/where



2
আপনি লিঙ্ক বোঝাতে চেয়েছেন দ্বারা একটি নির্দিষ্ট পথেই হাঁটছে? আপনি কি readlinkচেনা পথে কোনও কাজ করতে পারবেন না এবং আপনি যে পথটি পরীক্ষা করছেন তার সাথে এটি তুলনা করতে পারেন?
ব্র্যাচলে

@Bratchley। হ্যাঁ, আমি এটাই বোঝাতে চাইছি ... উত্তরের জন্য ধন্যবাদ।
বিলম্যান

2
আমি আপনাকে দৃ strongly়ভাবে অনুরোধ করছি যে সর্বদা কোটগুলিতে শেল ভেরিয়েবলগুলি রাখুন (উদাহরণস্বরূপ, if [ -L "$path" ]) যদি না আপনি যদি না চান তবে আপনার কাছে নিশ্চিত কারণ আপনি কী করছেন তা আপনি নিশ্চিত জানেন।
জি-ম্যান

@ জি-ম্যান দুর্দান্ত প্রতিক্রিয়াটির জন্য ধন্যবাদ .. অবচেতনভাবে আমি এটি করতে জানি, তবে এটি বাস্তবে ভুলে যাচ্ছি .. শক্তিবৃদ্ধি সাহায্য করে।
বিলম্যান

উত্তর:


22

$pathযার লক্ষণটি প্রতীকী লিঙ্ক কিনা তা আপনি যদি পরীক্ষা করতে চান তবে আপনি ইউটিলিটিটি /some/whereব্যবহার করতে পারেন readlink। এটি পসিক্স নয়, তবে এটি অনেক সিস্টেমে উপলব্ধ (জিএনইউ / লিনাক্স, ব্যজিবক্স, * বিএসডি,…)।

if [ "$(readlink -- "$path")" = /some/where ]; then 

মনে রাখবেন যে এটি একটি সঠিক পাঠ্য তুলনা। যদি লিঙ্কটির লক্ষ্য হয় /some//whereবা whereহয় এবং এর মান $pathহয় /some/linkতবে পাঠ্যগুলি মিলবে না।

readlinkবিকল্পের সমর্থনের অনেকগুলি সংস্করণ -f, যা সমস্ত প্রতীকী লিঙ্কগুলি প্রসারিত করে পাথটিকে আধ্যাত্মিক করে তোলে।

দুটি ফাইল একই রকম (প্রতীকী লিঙ্কগুলি অনুসরণ করার পরে একই ফাইলের হার্ড লিঙ্কগুলি) কিনা তা পরীক্ষা করার -efজন্য testবিল্টিনে অপারেটরটিকে ড্যাশ, কেএসএস, বাশ এবং জেডএস সহ অনেক শেলগুলি সমর্থন করে । এই বৈশিষ্ট্যটি বহুলভাবে সমর্থিত তবে পসিক্স নয়।

if [ "$path" -ef "/some/where" ]; then 

লিঙ্কটি যখন কোনও আপেক্ষিক পথের দিকে নির্দেশ করে ... প্রথম উদাহরণটি কার্যকর হয় না ...
-19 এ 12

1
@inemanja অবশ্যই তা করেন। তবে আমি যেমন বলেছি এটি একটি পাঠ্য তুলনা। এটি একই লক্ষ্য হিসাবে বিভিন্ন পাথকে পৃথক করে। যদি আপনি পরীক্ষা করতে চান যে কোনও প্রতীকী লিঙ্কের লক্ষ্য কোনও নির্দিষ্ট পাথের পরিবর্তে একটি নির্দিষ্ট ফাইল , তবে আমি নীচে বর্ণিত একটি পদ্ধতি ব্যবহার করুন।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

0

আপেক্ষিক ও পরম পাথ এবং "/" কোনও পথ বা লিঙ্কের শেষে সমস্যাগুলি এড়াতে:

if [ "$(realpath $(readlink -- "$path"))" = $(realpath /some/where) ]; then
    echo "Is"
else 
    echo "Is not"
fi

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