Sub PATH- এ ডিরেক্টরি যুক্ত করার সময় সমস্ত উপ-ডিরেক্টরিকে যুক্ত করা সম্ভব


8

PATH = ~ / আমার_প্রগ্রাম / বিন দ্বারা directory PATH তে কিছু ডিরেক্টরি যুক্ত করার সময়: "$ AT पथ}"

  1. এটি কি সত্য যে কেবল ডিরেক্টরিতে সরাসরি এক্সিকিউটেবলগুলি $ PATH- র মাধ্যমে পাওয়া যাবে, তবে এর উপ-ডিরেক্টরিতে অন্য এক্সিকিউটেবলগুলি কি তা পাবে না?
  2. এর সমস্ত উপ-ডিরেক্টরি যুক্ত করা কি সম্ভব? কখনও কখনও সমস্ত সাব-ডাইরেক্টরিগুলি স্পষ্টভাবে নির্দিষ্ট করুন যখন অনেকগুলি থাকে তখন অনেক কাজ হতে পারে।

ধন্যবাদান্তে!

উত্তর:


5

এই স্ক্রিপ্টটি ব্যবহার করে tree...

  • sudo apt-get install tree

আপনি পরিবর্তন করে ডিরেক্টরিগুলির গভীরতা পরিবর্তন -L 1
করতে পারেন এবং আপনি ব্যবহার করতে হবে কি না তা চয়ন করতে পারেন ~/...

আপডেট 2 :
.. কেবলমাত্র একটি শীর্ষস্থানীয় / হোম / ব্যবহারকারী / ("কোনও" নয়) প্রতিস্থাপনের জন্য স্ক্রিপ্টটি পরিবর্তন করেছে
.. এবং যুক্ত করা যুক্তিগুলি ..

আপডেট চেক করা হয়েছে: ..পথের মধ্যে এটি ইতিমধ্যে পাঠ্যপথের মধ্যে থাকা অবস্থায় ডিরেক্টরিতে ডিরেক্টরি যুক্ত করবেন না .. এই চেকটি '~ /' এবং '/ হোম / ব্যবহারকারী /' কে আলাদা বলে বিবেচনা করে।

আপনার প্রশ্ন 1 আবার ... হ্যাঁ এটি সত্য; প্রতিটি নির্দিষ্ট ডিরেক্টরি অবশ্যই পৃথক পৃথকভাবে পাঠাতে হবে ..

আপনার প্রশ্ন 2 পুনরায় ... এখানে একটি স্ক্রিপ্ট যা আপনি যা চান তা করবে ..
আমি এটি পরীক্ষা করেছি, তবে এটি যেমন দাঁড়িয়েছে এটি বর্তমান অধিবেশনটির জন্য নতুন প্যাথ
তৈরি করবে .. এটি স্থায়ী করার জন্য আপনি ব্যবহার করতে পারবেন export PATH(তবে আমি এর বিবরণে কিছুটা স্কেচি করছি export)

#
# name: path-add-dirs
# eg: $ path-add-dirs "$HOME/bin" "tilde" 1

# When directories are $HOME based, choose format.
# Add directories in tidle format: ~/...
#       ...or as fullly-qualified: /home/user/...

# mode values: "tilde", or  anything else for fully-qualified   
mode="$2" # valid mode values: "tilde", or  anything else   
maindir="$1"; dirs= ; echo
# Buld string of subdirectories to a depth/level of 1  
while IFS= read -r dir ; do
  # Don't add directory if it is already in PATH
  if [[ "$mode" == "tilde" ]] ; then
    # replace only a *leading* :/home/user/ 
    homecheck=":$dir"                    
    dircheck="${homecheck/:$HOME\//:~/}"
    dircheck="${dircheck#:}"
  else
    dircheck="${dir}"
  fi;
  pathcheck=":$PATH:"
  if [[ "$pathcheck" != "${pathcheck/:$dircheck:/}" ]] ; then  
    echo "ALREADY IN PATH: $dircheck"
  else
    dirs="$dirs:$dir"  
    echo " added: $dircheck"
  fi
done < <(tree --noreport -L $3 -fi -d "$maindir")
# Choose one of these two options
if [[ "$mode" == "tilde" ]] 
then PATH="$PATH${dirs//:$HOME\//:~/}" # change :$HOME to :~/ 
else PATH="$PATH$dirs" # this method has fully expanded $HOME
fi
echo
echo "$PATH"
echo

3

এটি সম্ভব নয়, কারণ ইউনিক্স-ভিত্তিক সিস্টেমগুলি সেভাবে কাজ করার জন্য ডিজাইন করা হয়নি। সাধারণত, সমস্ত নির্বাহযোগ্য ফাইল অল্প সংখ্যক ডিরেক্টরিতে চলে। উদাহরণস্বরূপ, আমি নিজের উদ্দেশ্যে যে সমস্ত জিনিস লিখি সেগুলি ~ / বিনে যায়।

আপনি যদি চান না যে আপনার আসল বাইনারি এবং স্ক্রিপ্টগুলি একটি বিন ডিরেক্টরিতে বাস করতে চান, আপনি প্রকৃত বাইনারিতে একটি সিমিলিংক তৈরি করতে পারেন, যেমন, ~ / বিন।

AT PATH- তে সমস্ত উপ-ডিরেক্টরি থাকা বিশেষভাবে কাম্য নয়, যেহেতু এটি অনুসন্ধানে কেবল আরও ডিরেক্টরি যুক্ত করে, আপনার প্যাথ-এ থাকা অন্যান্য এক্সিকিউটেবলের ঝুঁকি বাড়ায় যা সেখানে হওয়া উচিত নয় এবং সত্যিকার অর্থে খুব একটা সুবিধা দেয় না।


3

এটি কাজ করা উচিত

PATH="$PATH:$(find ~/bin -type d -printf ":%p")"

এটা বিবেচনা করুন

  • পুরো ডিরেক্টরি গাছটি আড়াআড়ি হয়ে যাবে, এতে কিছুটা সময় নিতে পারে, তাই শ্রেণিবদ্ধ ছোট রাখার চেষ্টা করুন।
  • এটি PATH সেট হওয়ার পরে তৈরি অ্যাকাউন্ট ডিরেক্টরিগুলিতে নেবে না।
  • আপনি যদি এটি একাধিকবার আবেদন করেন তবে PATH এ প্রচুর নকল পাবেন। আপনি মূল PATH কিছু অস্থায়ী ভেরিয়েবলের জন্য নির্ধারণ করতে চাইতে পারেন (যেমন। ওল্ডপ্যাথ)।

দুটি বাগ: এটি নিখুঁত পাথ যোগ করছে না -> সঠিকভাবে কাজ করছে না। এছাড়াও, এটি দুটি ডাবল কলোন যুক্ত করে। সরান: $ PATH পরে।
ওলি

1

না, এটি সহজ উপায়ে সম্ভব নয়। সমস্ত এক্সিকিউটেবলকে "~ / আমার_প্রগ্রাম / বিন" এ সফটলিঙ্কগুলি যুক্ত করার কি সম্ভাবনা থাকবে?


1

এটি এইভাবে চেষ্টা করুন:

export PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')"

এটি এতে এর ~/.local/binসমস্ত উপ-ডিরেক্টরি সহ নিজেকে যুক্ত করবে $PATH

ব্যাখ্যা:

  • du সমস্ত লৌকিক ডিরেক্টরি প্রতিটি লাইন প্রদর্শন করবে
  • cut -f2 দ্বিতীয় কলামটি, অর্থাৎ, উপ-ডিরেক্টরিগুলির নাম আহরণ করবে
  • tr '\n' ':'প্রতিটি লিঙ্ক বিরতি কোলনে পরিণত হবে। এটি সমস্ত লাইনকে একক লাইনে যোগ দেবে এবং উপ-ডিরেক্টরিগুলি একটি কোলন দ্বারা সীমিত করা হয়
  • sed 's/:*$//' শেষ কোলন মুছে ফেলবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.