বাশ কীভাবে একটি পৃথক ডিরেক্টরি প্রসঙ্গে একটি কমান্ড চালাতে পারে?


94

আমার একটি সাধারণ কমান্ড রয়েছে যা খুব নির্দিষ্ট ডিরেক্টরি থেকে ডেকে আনে। এই প্রোগ্রামের জন্য / বিনে কেবলমাত্র একটি নির্বাহী বসে আছেন, এবং এটির সঠিকভাবে চালনার জন্য বর্তমান ওয়ার্কিং ডিরেক্টরিটি অত্যন্ত গুরুত্বপূর্ণ। স্ক্রিপ্টটি যে ডিরেক্টরিগুলির মধ্যে এটি চালিত হয় তার ভিতরে থাকা ফাইলগুলিকে প্রভাবিত করে।

এখন, আমার কাছে একটি কাস্টম শেল স্ক্রিপ্ট রয়েছে যা একটি ডিরেক্টরিতে কিছু কাজ করে, তবে আমাকে উপরে উল্লিখিত কমান্ডটি কল করতে হবে যেন এটি অন্য ডিরেক্টরিতে রয়েছে।

আপনি কিভাবে এটি শেল স্ক্রিপ্টে করবেন?


উত্তর:


39

আপনি ব্যবহার করতে পারেন cdbuiltin, অথবা pushdএবং popdএই কাজের জন্য builtins। উদাহরণ স্বরূপ:

# do something with /etc as the working directory
cd /etc
:

# do something with /tmp as the working directory
cd /tmp
:

আপনি বিল্টিনগুলি অন্য কোনও কমান্ডের মতোই ব্যবহার করেন এবং কোনও স্ক্রিপ্টে আপনার পছন্দ অনুযায়ী ডিরেক্টরি প্রসঙ্গে পরিবর্তন করতে পারেন।


4
এর রয়েছে cd -পূর্ববর্তী ডিরেক্টরি ফিরে পরিবর্তন করার জন্য একটি POSIX শেল হবে। এটি বলেছিল, (ক) pushdএবং popdসত্যই ইন্টারেক্টিভ ব্যবহারের জন্য এবং এবং (খ) এটি অনুমান করা সর্বদা নিরাপদ নয় যে আপনি cdযেখানে শুরু করেছিলেন সেখানে ফিরে যেতে পারেন , বিশেষত জটিল সাবসিস্টেমগুলিতে যা অভ্যন্তরীণভাবে সীমাবদ্ধ অনুমতি ব্যবহার করতে পারে (দেখুন স্ট্যাকওভারফ্লো / ক্রোয়েশনস / 10555284 /… )।
গীকোসৌর

4
সাবশেল ব্যবহার করা আরও অনেক ভাল সমাধান
josh123a123

স্ক্রিপ্টিংয়ের জন্য, একটি সাবশেল সম্ভবত একটি ভাল ধারণা .. তবে আমি এটি সম্পর্কে জানতে পেরে সত্যিই খুশি popd
কনারবোড

আপনি কি দয়া করে :এখানে বোঝাতে পারেন প্রতীকটির অর্থ কী?
ভাদিম কোতোভ

4
@ ভাদিমকোটভ আমি মনে করি এটি কার্যকরভাবে কোনও অপশন নয়। man bashপড়ার প্রাসঙ্গিক বিভাগ : : [arguments]কোনও প্রভাব নেই; কমান্ডটি আর্গুমেন্টগুলি প্রসারিত এবং নির্দিষ্ট নির্দিষ্ট পুনর্নির্দেশগুলি সম্পাদনের বাইরে কিছুই করে না। ফেরতের অবস্থা শূন্য।
বালক

218

cdএকটি সাবসিলে ব্যবহার করুন ; এই ধরণের সাবશેল ব্যবহারের শর্টহ্যান্ড উপায় হ'ল বন্ধনী।

(cd wherever; mycommand ...)

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


আপনি একই প্রসঙ্গে মাল্টি-লাইন কমান্ডগুলির জন্য \প্রত্যেকের পরে একটি সন্নিবেশ করতে পারেন ;
চিরামিসু


20

আপনি যদি আপনার বর্তমান কার্যনির্বাহী ডিরেক্টরিতে ফিরে যেতে চান:

current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
  1. আমরা current_dirআপনার সমান ভেরিয়েবল সেট করছিpwd
  2. এর পরে আমরা cdযেখানে যাচ্ছি আপনার কমান্ড চালানোর দরকার আছে
  3. তাহলে আমরা কমান্ডটি চালাচ্ছি
  4. তারপরে আমরা cdআমাদের ভেরিয়েবলে ফিরে যাবcurrent_dir

@ পেইসোফবার্টের আরেকটি সমাধান pushd && YOUR COMMAND && popd


4
বা আপনি করতে পারেনpushd && YOUR COMMAND && pulld
apieceofbart

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