এই পুনরাবৃত্তাকার বাশ ফাংশনটি ডায়াগোনস্টিকের সাথে লিঙ্ক চেইন এবং গণনা প্রিন্ট করবে:
chain() { local link target; if [[ -z $_chain ]]; then unset _chain_count _expansion; _chain="$1"; fi; link=$(stat --printf=%N $1); while [[ $link =~ \-\> ]]; do target="${link##*\`}"; target="${target%\'}"; _chain+=" -> $target"; ((_chain_count++)); _expansion+="$_chain_count. $1 is expanded to $target $(stat --printf="(%A %U %G)" $target)"$'\n'; chain "$target"; return; done; echo "$_chain ($_chain_count)"; echo "$_expansion"; unset _chain _chain_count _expansion; }
এটি প্রয়োজন stat
। readlink
পরিবর্তে ব্যবহার করা আরও তথ্যের এবং সংস্করণের জন্য stat
, আমার উত্তরটি এখানে দেখুন (গণনা বৈশিষ্ট্যটি যুক্ত করা দরকার তবে অনুমতি এবং মালিক / গোষ্ঠী যুক্ত করা আরও কিছুটা চ্যালেঞ্জিং হবে)।
এর জন্য:
a
b -> a
c -> b
d -> c
এর ফলাফল chain d
হবে:
d -> c -> b -> a (3)
1. d is expanded to c (lrwxrwxrwx username groupname)
2. c is expanded to b (lrwxrwxrwx username groupname)
3. b is expanded to a (-rw-r--r-- root root)
ফাংশনের আরও পঠনযোগ্য সংস্করণটি এখানে:
chain ()
{
local link target;
if [[ -z $_chain ]]; then
unset _chain_count _expansion;
_chain="$1";
fi;
link=$(stat --printf=%N $1);
while [[ $link =~ \-\> ]]; do
target="${link##*\`}";
target="${target%\'}";
_chain+=" -> $target";
((_chain_count++));
_expansion+="$_chain_count. $1 is expanded to $target $(stat --printf="(%A %U %G)" $target)"$'\n';
chain "$target";
return;
done;
echo "$_chain ($_chain_count)";
echo "$_expansion";
unset _chain _chain_count _expansion
}
$'\n
পরেই অনুপস্থিত$(stat
। কেবলমাত্র';
এটির সাথে অদ্ভুত বিন্দুযুক্ত রেখা অবিলম্বে অনুপস্থিত অক্ষরগুলি অনুসরণ করে।