আপনারা অনেকেই সম্ভবত কমান্ডটি দেখেছেন যা আপনাকে এমন কোনও ফাইলে লিখতে দেয় যা রুট অনুমতি দরকার, এমনকি আপনি যখন sudo দিয়ে ভিএম খুলতে ভুলে গিয়েছিলেন:
:w !sudo tee %
বিষয়টি হ'ল এখানে যা ঘটছে তা আমি পাই না।
আমি ইতিমধ্যে এটি অনুধাবন করেছি: এটির
w
জন্য
*:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
সুতরাং এটি স্ট্যান্ডার্ড ইনপুট হিসাবে সমস্ত লাইন পাস।
!sudo tee
অংশ আহ্বান tee
প্রশাসকের প্রাধিকার দিয়ে।
সকলের বোধগম্য হওয়ার জন্য, %
ফাইলের নামটি আউটপুট করা উচিত (এর প্যারামিটার হিসাবে tee
), তবে এই আচরণের জন্য সাহায্যের জন্য উল্লেখ খুঁজে পাচ্ছি না।
tl; dr এই আদেশটি ছড়িয়ে দিতে কেউ আমাকে সাহায্য করতে পারে?
sudo
প্রয়োগ করা হয় cat
, কিন্তু না করতে >
, তাই এটি অনুমোদিত নয়। আপনি পুরো কমান্ডটি একটি সুডো সাবশেলে চালানোর চেষ্টা করতে পারেন :w !sudo sh -c "cat % > yams.txt"
, যেমন , তবে এটি কোনওভাবেই কাজ করে না, কারণ সাব-শেল- %
এ শূন্য; আপনি আপনার ফাইলের বিষয়বস্তু ফাঁকা রাখবেন।
:w !sudo sh -c "cat >%"
বাস্তবে ঠিক ঠিক তেমনি কাজ করে sudo tee %
কারণ ভিম ফাইলের নামটি সাবস্কেলে %
যাওয়ার আগে ফাইলের পরিবর্তে প্রতিস্থাপন করে । যাইহোক, ফাইলনামের ফাঁকে ফাঁকে ফাঁকা জায়গা রাখলে উভয়ই কাজ করে না; আপনাকে করতে হবে :w !sudo sh -c "cat >'%'"
বা :w !sudo tee "%"
এটি ঠিক করতে হবে।
:w !sudo cat > %
স্ট্যান্ডার্ড আউটপুটকে দূষিত করবে না পাশাপাশি কাজ করবে না?