বাশ উপর শর্তাধীনভাবে পথ পরিবর্তন


1

এটা পাওয়া যায় যখন আমি "foo" ডিরেক্টরির পরিবর্তন করা উচিত। এটা কিভাবে করতে হবে? এই পর্যন্ত আমি সঙ্গে এসেছেন:

cd `ls | grep foo`

কিন্তু এর সাথে সমস্যা হল যে grep এর জন্য কোন মিল নেই, ডিরেক্টরিটি হোম ডিরেক্টরিতে পরিবর্তিত হয়।

আমি অন্য পদ্ধতির ব্যবহার ছিল:

ls -1 | grep foo | xargs -r cd

এই উদাহরণে -আর কোন মিল থাকলে কমান্ডটি না চালানোর যত্ন নেয়। কিন্তু সিডি কমান্ডটি শেল বিল্ড-ইন এবং এক্সিকিউটেবল নয় বলে এটি কাজ করে না। অথবা এমন কিছু ..

[সম্পাদনা] উত্তর জন্য ধন্যবাদ। যদি সম্ভব হয়, তবে আপনি কীভাবে grep এর কাছাকাছি উল্লিখিত কার্যকারিতাটি একত্রিত করতে পারেন, যাতে আমি উন্নত regexp ব্যবহার করতে পারি?

উত্তর:


1

এটি শুধুমাত্র ডিরেক্টরিগুলিতে কাজ করবে এবং যদি কোনও পাওয়া না থাকে তবে একই ডিরেক্টরিতে থাকবে:

cdg () {
    cd $(ls -d */ | grep "$1" || echo .)
}

যদি একাধিক ডিরেক্টরি মিলিত হয়, এটি তালিকাতে প্রথমটিতে পরিবর্তিত হবে।


3

কিভাবে এই চেষ্টা সম্পর্কে?

test -d foo && cd foo

আপনি এটি আপনার .bashrc বা কিছুতে একটি ফাংশন হিসাবে রাখতে পারেন:

# conditional cd, use as follows:
# ccd some_dir
function ccd {
    test -d "$1" && cd "$1"
}

সাধারণ পরীক্ষা-ডি পরিবর্তে grep ব্যবহার করার জন্য, নিম্নলিখিতটি ব্যবহার করুন (নোট করুন যে আপনি অন্য grep ব্যবহার করতে পারেন, অথবা আপনার ইচ্ছার মতো পতাকা যুক্ত করতে পারেন):

# conditional regex-cd
functino rccd {
    if has_dir=`ls |egrep "$1"`; then cd $has_dir; fi
}

// আপডেট আপডেট মেলে।


2
if [[ -d foo ]]; then
  cd foo
fi

-d মানে "ফাইল বিদ্যমান এবং একটি ডিরেক্টরি।" এই মানুষের bash এর "শর্তাধীন অভিব্যক্তি" বিভাগে হয়।

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