In PATH ভেরিয়েবল থেকে কোনও পথ কীভাবে সরানো যায়?


20

আমি ডেবিয়ান এবং আমার সাম্প্রতিক সময়ে (কিছু আপগ্রেড করার পরে) আমার শেল হিসাবে মাছ ব্যবহার করছি যখনই আমি কমান্ডের সমাপ্তিটি ব্যবহার করার চেষ্টা করব:

set: No such file or directory
set: Could not add component /usr/lib/x86_64-linux-gnu/libfm to PATH.
set: No such file or directory

এটি চলছে:

echo $PATH 

আমাকে এটি দেয়:

/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games

আমার সিস্টেমে কোনও নেই /usr/lib/x86_64-linux-gnu/libfm, তাই আমি বুঝতে পারি যে কেন মাছ অভিযোগ করছে, তবে কীভাবে আমার $PATHচলক থেকে এই পথটি সরিয়ে ফেলা যায় তা খুঁজে পাচ্ছি না ।

কেউ কি জানেন কীভাবে আমি এটি করতে পারি?


grep -R /usr/lib/x86_64-linux-gnu/libfm ~/.config/fish /usr/share/fish??
গ্লেন জ্যাকম্যান 16

$ গ্রেপ -আর / ইউএসআর / লিবিব / x86_64-লিনাক্স-গ্নু / লিবিফএম। / .কনফিগ / ফিশ / ইউএসআর / শেয়ার / ফিশ / হোমে /সুপারসার / সিএনফিগ / ফিশ / ফিশ_হিসটরি: গ্রেপ -আর / ইউএসআর / লিবিব / x86_64- linux-gnu / libfm ~ / .config / માછલી / usr / শেয়ার / মাছ
tomekK

উত্তর:


33

'মাছ' $ পাথ পরিবর্তনশীল সেটিং প্রণালী আসলে ব্যবহার করা set --universal fish_user_paths $fish_user_paths /new/path/here। তারপরে session ফিশ_ইউজার_পথগুলি নতুন সেশন শুরু হওয়ার সাথে সাথে $ PATH ভেরিয়েবলটিতে আসলে সংশোধন করা হয়। AT PATH ডকুমেন্টেশন আপনাকে কীভাবে এটি মুছে ফেলা যায় তা বর্তমানে আপনাকে জানায় না।

মাছের ক্ষেত্রে প্রতিটি পরিবর্তনশীল আসলে একটি তালিকা (অ্যারে) হয় এবং আপনি প্রতিটি সূচি / সূচক ব্যবহার করে সরাসরি আইটেমটি অ্যাক্সেস করতে পারেন। echo $fish_user_pathsতালিকার প্রতিটি আইটেমের একটি স্পেস সীমিত সংস্করণ প্রিন্ট করবে, অনুবাদ ফাংশন দিয়ে স্পেসগুলি নতুন লাইন তৈরি করবে echo $fish_user_paths | tr " " "\n"এবং তারপরে সংখ্যা লাইন ফাংশন সহ লাইন নম্বরগুলি রাখবে echo $fish_user_paths | tr " " "\n" | nl,। তারপরে এটি মুছুন set --erase --universal fish_user_paths[5]। আপনার অবশ্যই ব্যবহার করা উচিত --universalবা এটি কোনও নতুন সেশনে কাজ করবে না।

কারও কাছে যদি সময় থাকে তবে দয়া করে এই উদাহরণটি সহ রেপোতে একটি পিআর জমা দিন । আমি এখানে একটি ইস্যু খুললাম ।

tldr;

  1. echo $fish_user_paths | tr " " "\n" | nl // আপনি মুছে ফেলতে চান এমন একটি নম্বর পান, যেমন 5 তম নম্বর
  2. set --erase --universal fish_user_paths[5] // সর্বমোট 5 তম পথটি মুছুন যাতে এটি নতুন সেশনে স্থির থাকে

কেন এতো আরকেন? এটি কি কোনও বিল্ড ইন ফিচার এবং ডকুমেন্টেশনে যুক্ত করা উচিত নয় যাতে লোকেরা গুগলে না থাকে এবং এখানেই শেষ না হয়? ওহ ভাল ..
পেরস নীল আমসেন

আমি মনে করি যদি আমরা এখানে @ ক্লোজাচের উত্তরটি সুপার user.com/a/1212305/30982 গ্রহণ করি , যা অ্যাডপ্যাথস () এবং রিমুথপথ () ফাংশন, এবং একটি পিআর খুলি তবে এটি যুক্ত হওয়ার প্রথম পদক্ষেপ হবে। রক্ষণাবেক্ষণকারীদের বেশিরভাগই কাজ করা বেশ ভাল, একজন আমার কাছে বিরক্ত বলে মনে হয়, তবে সামগ্রিকভাবে আমি মনে করি আমাদের একটি ভাল সুযোগ থাকবে। সুতরাং এটি আমাদের পরবর্তী পদক্ষেপ।
এলিজা লিন

9

ইলিয়াস বলেন, সেরা অনুশীলনের পরিবর্তন হয় fish_user_pathsবিশ্বব্যাপী বদলে PATH। এটি আবার গুগলে থাকা এড়াতে ...

  1. একাধিক ফাংশন তৈরি করুন যা কেবল পরিবর্তন করেfish_user_paths
  2. উভয় ফাংশনকে অটোলয়েড করুন

ব্যবহারকারীর পথে যুক্ত করতে:

function addpaths
    contains -- $argv $fish_user_paths
       or set -U fish_user_paths $fish_user_paths $argv
    echo "Updated PATH: $PATH"
end

একটি ব্যবহারকারী পথ মুছে ফেলার জন্য যদি উপস্থিত থাকে (আংশিক ক্রেডিট এই ):

function removepath
    if set -l index (contains -i $argv[1] $PATH)
        set --erase --universal fish_user_paths[$index]
        echo "Updated PATH: $PATH"
    else
        echo "$argv[1] not found in PATH: $PATH"
    end
end

এবং অবশ্যই, এগুলি স্বয়ংক্রিয়ভাবে চালিত করার জন্য :

funcsave addpaths; funcsave removepath

ব্যবহারের উদাহরণ:

> addpaths /etc /usr/libexec
Modifying PATH: /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin

> removepath /usr/libexec
Modifying PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/local/bin /usr/bin /bin /usr/sbin /sbin

দ্রষ্টব্য: আমি সবেমাত্র আবিষ্কার করেছি যে এই পদ্ধতিটি অন্য কোনও প্রক্রিয়াতে যুক্ত কোনও পথ সরিয়ে ফেলবে না; আপনি যখন কোনও টার্মিনাল সেশন খোলেন প্রতিবার কোনও পথ ফিরে আসতে দেখলে কিছু ডট-ফাইল ক্লিনআপ ক্রমযুক্ত হতে পারে।
ক্লোজাচ

এটি দুর্দান্ত, স্রেফ আমার লোকাল যুক্ত!
এলিজা লিন

3

এটি শেষ পথটি দিয়ে 6 টি মোছা উচিত:

set -e PATH[6..-1]

- পতাকাটি মুছে ফেলা হয়েছে। দেখুন help set


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