এই স্ক্রিপ্ট বিবেচনা করুন।
#! /usr/bin/env bash
mkdir -p target
mkdir -p mydir/package/
touch mydir/package/file
ln --symbolic mydir mylink
file mylink
stow --verbose --dir=./mylink --target=./target package
file target/file
আউটপুট হয়
mylink: symbolic link to mydir
LINK: file => ../mydir/package/file
target/file: symbolic link to ../mydir/package/file
দৌড়ানোর আগে stow
, এটি দেখতে এটির মতো দেখাচ্ছে:
.
├── mydir
│ └── package
│ └── file
├── mylink -> mydir
└── target
চালানোর পর stow
, উপর mylink
, আমি এটা আশা করা ভালো চেহারা হবে:
.
├── mydir
│ └── package
│ └── file
├── mylink -> mydir
└── target
└── file -> ../mylink/package/file
তবে পরিবর্তে এটি দেখতে এটির মতো দেখাচ্ছে:
.
├── mydir
│ └── package
│ └── file
├── mylink -> mydir
└── target
└── file -> ../mydir/package/file
দেখে মনে হচ্ছে stow
কমান্ডটি প্যাকেজ ডিরেক্টরিটির রিয়েলপথটি সমাধান করেছে, সুতরাং ../mylink/package/file
এটি নির্দেশ করার পরিবর্তে এটি নির্দেশ করে ../mydir/package/file
।
এটি অত্যধিক ইন্ডিरेশন এড়ানোর জন্য অর্থবোধ করে, তবে এটি নিঃশব্দে ঘটে এবং সর্বদা কাম্য হতে পারে না। এই আচরণটি ঘিরে কাজ করার কোনও উপায় আছে কি?
সম্পাদনা: অনুরোধ অনুযায়ী, আমি উদাহরণ ব্যবহারের ক্ষেত্রে বর্ণনা করব যেখানে রিয়েলপথটি সমাধান করা অসুবিধাজনক।
প্রতীকী লিঙ্কগুলি কখনও কখনও সামঞ্জস্যের জন্য ব্যবহৃত হয় । দেবিয়ান এমনকি সরকারী নীতিতে এ সম্পর্কে কথা বলেন । প্রায়শই লক্ষ্য একটি একক ফাইল, তবে কখনও কখনও এটি ডিরেক্টরি হয়
। আমার সিস্টেমে /usr/share/doc/
একা একা কয়েকশ থাকতে পারে:
$ find /usr/share/doc -xtype d -type l | wc -l
325
ডিফল্ট আচরণ stow
ততক্ষণ ঠিক থাকে যতক্ষণ না সিমলিংক টার্গেটটি সরানো হয়। তবে কখনও কখনও পছন্দসই লক্ষ্যযুক্ত ডিরেক্টরি সরানো হয়। উদাহরণস্বরূপ, দেবিয়ান-এ, vim-runtime
প্যাকেজটি একটি ডিরেক্টরিতে / usr / share / vim / এর অধীনে ফাইলগুলি ইনস্টল করে যা সংস্করণটির উপর নির্ভর করে যেমন /usr/share/vim/vim64
সংস্করণ 6.4। তবে, প্যাকেজ এছাড়াও হবে একটি সিমবলিক লিঙ্ক আপডেট
এ /usr/share/vim/vimcurrent
বর্তমান সংস্করণটি যে সরু। এর অর্থ একটি সিমলিংক যা বলছে say
/usr/share/vim/vim64/doc/cmdline.txt
দেবিয়ানের পরবর্তী প্রকাশটি এটিকে আপগ্রেড করলে ভেঙে যায়
/usr/share/vim/vim70/doc/cmdline.txt
কিন্তু একটি syMLink
/usr/share/vim/vimcurrent/doc/cmdline.txt
উভয় সংস্করণে কাজ করবে।
যেহেতু stow
স্টো ডিরেক্টরিটির পরম ক্যানোনিকাল পাথটি ব্যবহার করে, একটি অনুরোধ পছন্দ করে
stow --dir=/usr/share/vim/vimcurrent --target=./my-vim-docs doc
প্রতীকী লিঙ্কগুলির ফলস্বরূপ, যেমন:
$ file cmdline.txt
cmdline.txt: symbolic link to ../../../../../usr/share/vim/vim64/doc/cmdline.txt
এটার মত না:
$ file cmdline.txt
cmdline.txt: symbolic link to ../../../../../usr/share/vim/vimcurrent/doc/cmdline.txt
( stow
এটি ব্যবহারের অনুপ্রেরণা vimcurrent/docs
হ'ল বর্তমান ডকুমেন্টেশনের সাথে আমার নিজস্ব ভিআইএম নোটগুলি মিশ্রিত করতে সক্ষম হবে।) নোট করুন যে vimcurrent
সামঞ্জস্যতা সিমিলিংক
বর্তমান দেবিয়ান বিতরণগুলিতে আর উপস্থিত নেই ,
যদিও এটি আর্ক লিনাক্সের মতো অন্যদের মধ্যে থাকতে পারে ; আমি নিশ্চিত নই. যাই হোক না কেন, এখানে একটি স্ক্রিপ্ট যা ভিম ডকুমেন্টেশনের জন্য সাধারণ ধারণা দেয়:
#! /usr/bin/env bash
mkdir -p target
ln --symbolic /usr/share/vim/vim80 vimcurrent
stow --verbose --dir=./vimcurrent --target=./target pack
file target/dist
আউটপুট হল:
LINK: dist => ../../../../../usr/share/vim/vim80/pack/dist
target/dist: symbolic link to ../../../../../usr/share/vim/vim80/pack/dist
হাইপোথিটিক্যালি, stow
একটি পতাকা বলা হতে পারে, বলুন --no-realpath
, সুতরাং আউটপুট পরিবর্তে এর মতো দেখতে লাগবে:
LINK: dist => ./vimcurrent/pack/dist
target/dist: symbolic link to ./vimcurrent/pack/dist
প্রতিটি সংস্করণের সাথে পরিবর্তনযোগ্য সামঞ্জস্যের অন্যান্য উদাহরণগুলির জন্য, এখানে আমার ল্যাপটপে আরও দুটি আমি জানি:
$ file /usr/share/go
/usr/share/go: symbolic link to go-1.10
$ file /usr/share/mscore
/usr/share/mscore: symbolic link to mscore-2.1
সিমলিংক-পয়েন্ট-টু-সিমিলিং কেসটির সমাধান করতে:
#! /usr/bin/env bash
mkdir -p target
mkdir -p mydir/package/
touch mydir/package/file
ln --symbolic mydir mylink
ln --symbolic mylink mylink2
namei mylink2
সৃষ্টি করে:
f: mylink2
l mylink2 -> mylink
l mylink -> mydir
d mydir
এবং তারপর:
$ stow --verbose --dir=./mylink2 --target=./target package
$ file target/file
সৃষ্টি করে:
LINK: file => ../mydir/package/file
target/file: symbolic link to ../mydir/package/file
যেহেতু
$ stow --no-realpath --verbose --dir=./mylink2 --target=./target package
$ file target/file
এটি উত্পাদন করবে:
LINK: file => ../mylink2/package/file
target/file: symbolic link to ../mylink2/package/file
অনুমানমূলক --no-realpath
আচরণে এটি স্টো ডিরেক্টরিটিকে নিয়মিত ডিরেক্টরি হিসাবে বিবেচনা করে।
এই বৈশিষ্ট্যটি একটি দৃশ্যে প্রযোজ্য হবে যেখানে
1) স্টো ডিরেক্টরিটি একটি সিমিলিংক হতে হবে এবং
2) উত্পন্ন সিমলিঙ্কগুলিতে সেই লিঙ্কটি সংরক্ষণ করা বাঞ্ছনীয়।
যদিও আমি এই বৈশিষ্ট্যের অভাবটিকে একটি বড় ঘাটতি হিসাবে বিবেচনা করি না stow
, আমি আশা করি যে এই উদাহরণটি সর্বদা নীতিগত পথগুলি সমাধান না করার সম্ভাব্য কার্যকারিতাটি স্পষ্ট করে দেয়।
mylink
পরিবর্তে সিমলিঙ্ক করতেmylink2
যা আবার সিমলিঙ্কmydir
? স্টো কীভাবে সিদ্ধান্ত নিতে পারে যে এটি নির্দেশিত প্রতিলিঙ্ক তৈরি করবে../mylink/package/file
বা../mylink2/package/file
বা../mydir/package/file
?