স্টারডারে স্টেডআউট?


17

আমি এক প্রক্রিয়া থেকে অন্য প্রক্রিয়ার স্টিডিনে পাঠাতে চাই, তবে কনসোলেও পাঠাতে চাই। উদাহরণস্বরূপ stdout + stderr এ stdout প্রেরণ।

উদাহরণস্বরূপ, আমি git editনীচের সাথে এলিয়েন্স পেয়েছি :

git status --short | cut -b4- | xargs gvim --remote

আমি চাইছি ফাইলের নামের তালিকাটিও পর্দায় প্রেরণ করা হোক xargs

সুতরাং, এর teeমতো কোনও ইউটিলিটি আছে যা এটি করবে? যাতে আমি এর মতো কিছু করতে পারি:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote

উত্তর:


14

tee ব্যবহার করে বর্তমান কনসোলটিতে সদৃশ করতে পারেন tee /dev/tty

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote

পরিবর্তে, আপনি ব্যবহার করতে পারেন /dev/stdoutবা /dev/stderrতবে আপনার কমান্ড কোনও স্ক্রিপ্টের মধ্যে থাকলে সেগুলি পুনঃনির্দেশিত করা যেতে পারে। নোট করুন যে /dev/ttyসর্বদা কনসোল হবে (এবং একটি অ-ইন্টারেক্টিভ শেলের মধ্যে উপস্থিত নাও থাকতে পারে)। এটি ভুল, মন্তব্য পড়ুন।


1
বস্তুত, পাইপলাইন আপনি দেখাতে /dev/stdout হয় পুনঃনির্দেশ করেছে। এটি হ'ল, যদি আপনি tee /dev/stdoutপ্রভাবটি ব্যবহার করছিলেন তবে তা হ'ল সবকিছুকে xargsদু'বার পাঠানো হয় , এবং কিছুই টার্মিনালে যায় না।
celtschk

/dev/stdoutএকটি পাইপ দ্বারা পুনঃনির্দেশিত হয় না, এটি বর্তমান প্রক্রিয়া স্ট্যান্ডার্ড আউটপুট থেকে যাবে। তবে, আপনি যদি কোনও স্ক্রিপ্টে কমান্ডটি সজ্জিত করেন এবং তারপরে এই স্ক্রিপ্টের স্টাডআউটটি পুনর্নির্দেশ করেন, তবে /dev/stdoutআপনাকে পুনঃনির্দেশিত করা হবে। একটি ইন্টারেক্টিভ কনসোলে tee /dev/ttyএবং tee /dev/stdoutপাইপ ব্যবহার করার পরেও একই প্রভাব ফেলে has
ভিনসেন্ট রবার্ট

আপনি যদি আমাকে বিশ্বাস না করেন তবে আপনার শেলটি শুরু করুন এবং টাইপ করুন echo foo | tee /dev/stdout | tr f bএবং echo foo | tee /dev/tty | tr f b। আপনার জন্য এখানে একটি ইঙ্গিত দেওয়া হল: এটি teeযা /dev/stdoutফাইলের নাম হিসাবে ব্যাখ্যা করে ।
celtschk

2
আপনি ঠিক বলেছেন, আমি জানি না যে আমি কীভাবে এটি মিস করেছি। আমি tty এবং stdout সঙ্গে আমার নিজের শেল কিছু পরীক্ষা করেছি এবং আমি একরকম যে মিস করেছি। স্পষ্টতার জন্য ধন্যবাদ, আমি ভুল বিবৃতি সরিয়েছি।
ভিনসেন্ট রবার্ট

ওয়েল, স্টার্ডার পাইপ দ্বারা প্রভাবিত হয় না, আপনি এটি অপসারণ করার প্রয়োজন হবে না (অবশ্যই স্ক্রিপ্ট পুনর্নির্দেশ সতর্কতা অবশেষ, কিন্তু একটি স্ক্রিপ্টের জন্য, পুনঃনির্দেশযোগ্যতা সাধারণত একটি পছন্দসই সম্পত্তি হবে)।
celtschk


3

আপনি টি কমান্ড ব্যবহার করতে পারেন , কেবল এটি STDERR ফাইল দিয়ে খাওয়ান, উদাহরণস্বরূপ:

tee /dev/stderr
tee /proc/self/fd/2

সুতরাং এক্ষেত্রে আপনার নাম সম্ভবত:

git status --short | \
    cut -b4- | tee /dev/stderr | \
    xargs gvim --remote

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