বাশ - সিডির কোন কমান্ড থেকে ফলাফল কীভাবে পাইপ করা যায়


87

whichকমান্ড থেকে আমি কীভাবে ফলাফলটি পাইপ করতে পারি cd?

এটি আমি যা করার চেষ্টা করছি:

which oracle | cd
cd < which oracle

তবে তাদের কোনওটিই কাজ করে না।

এটি অর্জনের জন্য কি কোনও উপায় আছে (অবশ্যই কপি / কোস্টের পেস্টের চেয়ে)?

সম্পাদনা: দ্বিতীয় ভাবাতে, এই আদেশটি ব্যর্থ হবে, কারণ গন্তব্য ফাইলটি কোনও ফোল্ডার / ডিরেক্টরি নয়

তাই আমি এখনই অনুমান করা "/ ওরাকল" অংশটি (সেড বা অ্যাজক, এমনকি পার্ল) থেকে মুক্তি পাওয়ার আরও ভাল উপায় নিয়ে ভাবছি এবং কাজ করছি :)

সম্পাদনা: ঠিক আছে আমি শেষ পর্যন্ত যা পেয়েছি:

cd `which oracle | sed 's/\/oracle//g'`

4
যা আপনাকে নির্দেশ দেয় না, নির্দেশ দেয়
এ্যাঙ্কর্ন

আপনি প্রোগ্রাম ইনস্টল করা হয়েছে যেখানে ডিরেক্টরি পেতে চেষ্টা করছেন? dirname, basename ?
আনকর্ন

@ আআআ: আপনি ঠিক বলেছেন, আমি মনে করি ডেরনাম আরও ভাল কারণ এটি "সত্যিকারের দির" এর সাথে ইঙ্গিত দেয় যে ওরাকল সম্পাদনযোগ্য এর প্রতীকী সংযোগ নয় ... এ কারণেই আমার অভ্যাস ব্যর্থ হবে :)
মাইকেল মাও

উত্তর:


129

কমান্ডটি স্ট্যান্ডার্ড ইনপুট থেকে প্যারামিটারের প্রত্যাশা করে এমন ক্ষেত্রে আপনি পাইপ ব্যবহার করেন। ( এই সম্পর্কে আরও )

সঙ্গে cdকমান্ড যে ঘটনা না। ডিরেক্টরি হ'ল কমান্ড আর্গুমেন্ট। এই ক্ষেত্রে, আপনি কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন। ব্যাকটিক্স ব্যবহার করুন বা $(...)কমান্ডটি মূল্যায়ন করতে, এটিকে ভেরিয়েবলে সংরক্ষণ করুন ..

path=`which oracle`
echo $path # just for debug
cd $path

যদিও এটি অনেক সহজ উপায়ে করা যেতে পারে:

cd `which oracle` 

বা যদি আপনার পথে বিশেষ অক্ষর থাকে

cd "`which oracle`"

বা

cd $(which oracle)

যা ব্যাকটিক স্বরলিপি সমতুল্য, তবে প্রস্তাবিত (ব্যাকটিকগুলি অ্যাডোস্ট্রোফসের সাথে বিভ্রান্ত হতে পারে)

.. তবে মনে হচ্ছে আপনি চান:

cd $(dirname $(which oracle))

(যা আপনাকে দেখায় যে আপনি সহজেই বাসা বাঁধতে পারেন)

$(...) (পাশাপাশি ব্যাকটিক্স) ডাবল-কোটেড স্ট্রিংগুলিতেও কাজ করে, যা ফলাফলের অবশেষে ফাঁকা স্থান থাকতে পারে ત્યારે সহায়তা করে ..

cd "$(dirname "$(which oracle)")"

(মনে রাখবেন যে উভয় আউটপুটের জন্য ডাবল উদ্ধৃতিগুলির একটি সেট প্রয়োজন))


শীতল। আপনি এখানে দয়া করে কি সম্পর্কে কিছুটা ব্যাখ্যা করতে পারেন? এটি দেখতে ভেরিয়েবল ডিসেরেন্সের মতো; সেখানে কোনও ডিফল্ট অস্থায়ী পরিবর্তনশীল যেখানে কোনও আদেশের ফলাফল যায়?
ন্যাট ডব্লিউ।

আহ, আমি ব্যাকটিক্স সম্পর্কে সম্পূর্ণ ভুলে গেছি :(
মাইকেল মাও

4
আপনি কোট আরেকটি জুটি প্রয়োজন: cd "$(dirname "$(which oracle)")"
ফিলিপ

|একটি নতুন প্রক্রিয়া প্রর্দশিত, তাই এমনকি যদি cdstdin থেকে পড়া, cmd | cdকাজ না (অর্থাত মূল প্রক্রিয়ায় বর্তমান ডিরেক্টরী একই থাকবে হবে) হবে।
কাইল স্ট্র্যান্ড 22

23

ডিরেক্টরি পেতে dirname সহ:

cd $(which oracle | xargs dirname)

সম্পাদনা: ফাঁকা স্থান সহ পাথ থেকে সাবধান থাকুন, নীচে @નિশপ্যাটাল মন্তব্য দেখুন


4
cd "$(which oracle | xargs -0 dirname)"পথে যদি সাদা স্থান থাকতে পারে তবে ব্যবহার করুন । -0 পতাকাটি সাদা স্থানের চেয়ে নাল দিয়ে ইনপুট বিভক্ত করে।
আনিসপেটেল 21

9
cd `which oracle`

এগুলি ব্যাকটিকগুলি নোট করুন (সাধারণত একটি মার্কিন কীবোর্ডের 1 এর বামে কী)


4
পাথে স্পেস বা অন্যান্য "বিশেষ" অক্ষর রয়েছে এবং এটি আপনাকে ফাইলের নামটি কেটে ফেলতে হবে যদি এটি কাজ করে না।
ফিলিপ

@ ফিলিপ আপনি এই ব্যবহার করতে পারেন যদি আপনার পথে বিশেষ অক্ষর থাকেcd "`which oracle`"
রাম পাত্র

4

ঠিক আছে, এখানে একটি সমাধান যা সঠিক উদ্ধৃতি ব্যবহার করে:

cd "$(dirname "$(which oracle)")"

ব্যাকটিকগুলি এড়িয়ে চলুন, এগুলি কম পঠনযোগ্য এবং সর্বদা প্রক্রিয়া বিকল্পগুলি উদ্ধৃত করুন।


2

আপনার পাইপের দরকার নেই, আপনি ব্যাশ প্যারামিটার সম্প্রসারণ ব্যবহার করে যা করতে চান তা করতে পারেন!

আরও টিপ: আপনি বাশ ব্যবহার করছেন তবে বাহ্যিক "কোন" কমান্ডের পরিবর্তে "টাইপ-পি" ব্যবহার করুন।

# test
touch /ls
chmod +x /ls
cmd='ls'
PATH=/:$PATH
if cmdpath="$(type -P "$cmd")" && cmdpath="${cmdpath%/*}" ; then
   cd "${cmdpath:-/}" || { echo "Could not cd to: ${cmdpath:-/}"; exit 1; }
else
   echo "No such program in PATH search directories: ${cmd}"
   exit 1
fi

1

আপনার সম্পাদিত প্রশ্নের জবাবে আপনি কমান্ডটির নামটি ব্যবহার করে তা ছিনিয়ে নিতে পারেন dirname:

cd $(dirname `which oracle`)

পাথে স্পেস বা অন্যান্য "বিশেষ" অক্ষর থাকলে এটি কাজ করে না।
ফিলিপ

4
এটি ডাবল-কোট করে সহজেই ঠিক করা হয়েছে।
ডেভিড জেড

1

উপরের উত্তরের উত্তরের পাশাপাশি একটি বিষয় উল্লেখ করা দরকার যে সিডি হ'ল শেল বিল্টিন, যা ls এর মতো নতুন প্রক্রিয়া ছাড়া একই প্রক্রিয়াতে চলে যা একটি কমান্ড।

  1. /unix/50022/why-cant-i-redirect-a-path-name-output-from-one-command-to-cd

  2. http://en.wikedia.org/wiki/Shell_builtin

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