আমি source
(ওরফে .
) ইউটিলিটি সম্পর্কে ভালভাবে অবগত রয়েছি , যা কোনও ফাইল থেকে সামগ্রীগুলি নিয়ে যায় এবং বর্তমান শেলের মধ্যে এগুলি কার্যকর করে ute
এখন, আমি কিছু পাঠ্য শেল কমান্ডে রূপান্তর করছি এবং তারপরে সেগুলি চালিয়ে যাচ্ছি:
$ ls | sed ... | sh
ls
এটি কেবল একটি এলোমেলো উদাহরণ, মূল পাঠ্যটি যে কোনও কিছু হতে পারে। sed
খুব, পাঠ্য রূপান্তরের জন্য একটি উদাহরণ। মজার বিষয় হল sh
। আমি যা পাই পাইপ করি sh
এবং এটি এটি চালায়।
আমার সমস্যাটি হ'ল এর অর্থ একটি নতুন সাব শেল শুরু করা। আমি বরং আমার বর্তমান শেলের মধ্যে কমান্ডগুলি চালিত করতে চাই। আমি source some-file
যদি কোনও পাঠ্য ফাইলে কমান্ডগুলি পাই তবে আমি এটি করতে সক্ষম হব।
নোংরা লাগছে বলে আমি কোনও টেম্প ফাইল তৈরি করতে চাই না।
বিকল্পভাবে, আমি আমার সাব শেলটি আমার বর্তমান শেলের মতো একই বৈশিষ্ট্যগুলি দিয়ে শুরু করতে চাই।
হালনাগাদ
ঠিক আছে, ব্যাকটিক ব্যবহার করে সমাধানগুলি অবশ্যই কাজ করে, তবে আউটপুটটি যাচাই বাছাই করার সময় আমার প্রায়শই এটি করা প্রয়োজন, তাই ফলাফলটি শেষের দিকে কোনও অংশে পাইপ করার উপায় থাকলে আমি অনেক পছন্দ করতাম।
দু: খিত আপডেট
আহ, /dev/stdin
জিনিসটি দেখতে খুব সুন্দর লাগছিল, তবে আরও জটিল ক্ষেত্রে এটি কার্যকর হয়নি।
সুতরাং, আমি এটি আছে:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
যা নিশ্চিত করে যে সমস্ত .doc
ফাইলের এক্সটেনশন হ্রাস পেয়েছে।
এবং যা ঘটনাক্রমে হ্যান্ডেল করা যেতে পারে xargs
, কিন্তু এটি বিষয় ছাড়াও।
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
সুতরাং, আমি যখন প্রাক্তনটিকে চালিত করি, এটি এখনই প্রস্থান করবে, কিছুই হয় না।