আমি কীভাবে কেবল zsh এ স্টডারার পাইপ করব?


18

ব্যাশে:

$ echo hi 2>&1 1>/dev/null | cat
$

জেডএসে থাকাকালীন:

$ echo hi 2>&1 1>/dev/null | cat
hi
$

স্ট্যান্ডার্ড আউটডাইরেক্ট করার সময় কি কেবল স্ট্যান্ডার্ড ত্রুটিটি পাইপ করার কোনও উপায় আছে?

উত্তর:


22

Zsh সহ এবং সাথে (ডিফল্ট অনুসারে) mult_iosবিকল্পটি সহ :

echo hi 2>&1 1>/dev/null | cat

1> /dev/null | catএর গুণিতক ফেরৎ হিসেবে দেখা হয় echoএর stdout- এ।

সুতরাং echostdout এখন উভয় পুনর্নির্দেশ করা হয়েছে /dev/nullএবং একটি পাইপ cat(যেমন ব্যবহার করছেন tee)।

সেই একাধিক পুনঃনির্দেশ বাতিল করতে, আপনি এটি করতে পারেন:

echo hi 2>&1 >&- > /dev/null | cat

তা হ'ল, পুনর্নির্দেশের আগে স্টডআউট (পাইপিং বাতিল করা) বন্ধ করা /dev/null

অথবা একটি কমান্ড গোষ্ঠী ব্যবহার করুন বা সাবশেল ব্যবহার করুন:

{echo hi 2>&1 1>/dev/null} | cat 
(echo hi 2>&1 1>/dev/null) | cat

এইভাবে, echoস্টডআউটটি কেবল একবার স্পষ্টভাবে পুনঃনির্দেশিত হয় (পাইপ পুনর্নির্দেশটি গ্রুপ / সাবশেলে প্রয়োগ করা হয় এবং উত্তরাধিকার সূত্রে প্রাপ্ত হয় echo)।

অথবা আপনি multiosপুরোপুরি অক্ষম করতে পারেন :

(setopt nomultios; echo hi 2>&1 > /dev/null | cat)

বিকল্পভাবে, আপনি কোনও পাইপের পরিবর্তে প্রক্রিয়া বিকল্প ব্যবহার করতে পারেন :

echo hi 2> >(cat) > /dev/null

তবে সাবধান থাকুন যে যখন চাকরি নিয়ন্ত্রণ বন্ধ থাকবে (স্ক্রিপ্টগুলির মতো), catপ্রক্রিয়াটি অবিচ্ছিন্নভাবে চলবে (যেন শুরু হয়েছে &)।


3
ধন্যবাদ! এটির কাছাকাছি যাওয়ার আরও একটি উপায় (echo hi 2>&1 1>/dev/null) | cat
তাভিয়ান বার্নস

1
@ টাভিয়ানবার্নস, ভাল কথা, ধন্যবাদ আমি এটি সম্পূর্ণতার জন্য উত্তরে যুক্ত করেছি। এটি একটি কমান্ড গোষ্ঠী ( {echo...}|cat)
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.