STDOUT ছাড়াই টি কমান্ডের বিকল্প


37

আমি | sudo tee FILENAMEএমন কোনও ফাইল লিখতে বা সংযোজন করতে সক্ষম হয়ে যাচ্ছি যার জন্য বেশিরভাগ ক্ষেত্রে সুপারসার অনুমতি নেওয়া প্রয়োজন।

যদিও আমি বুঝতে পারি এটি কেন কিছু পরিস্থিতিতে সহায়ক, এটি teeআবারও তার ইনপুটটি STDOUT এ প্রেরণ করে, আমি কখনই বাস্তবে teeকোনও অংশেই দরকারী কিছু ব্যবহার করি নি । বেশিরভাগ পরিস্থিতিতে, এই বৈশিষ্ট্যটি কেবলমাত্র আমার পর্দাটিকে অবাঞ্ছিত জিটার দিয়ে পূর্ণ করবে, যদি আমি অতিরিক্ত পদক্ষেপ না নিয়ে এবং ম্যানুয়ালি এটিকে চুপ করে থাকি tee 1> /dev/null

আমার প্রশ্ন: আন্ডারগ্রাউন্ডে কি কোনও কমান্ড রয়েছে, যা ঠিক একই জিনিসটি teeকরে তবে ডিফল্টরূপে স্টাডিআউটে কিছুই আউটপুট দেয় না?


আপনি যদি এর teeসাথে প্রতিস্থাপন করেন cat >filename, আপনি যে ফলাফল চান তা কি পান?
বরদা

4
catনিজে থেকে ফাইলগুলিতে লেখেন না। এবং >অপারেটর ফাইলগুলি বর্তমান ব্যবহারকারীর দ্বারা লিখিত না হওয়ার কারণে কাজ করে না able সুতরাং না, এটি কিছুটা সাহায্য করে না। এবং দয়া করে প্রতি 2 সেকেন্ড পরে আপনার মন্তব্যের অর্থ পুরোপুরি পরিবর্তন করতে থামান stop পরিবর্তে একটি নতুন তৈরি করুন।
এফ

আপনি যদি এর | sudo tee FILENAMEসাথে প্রতিস্থাপন করেন | sudo cat >filename, আপনি যে ফলাফল চান তা কি পান?
বরদা

4
না, >অপারেটর ফাইলটিতে লিখতে বর্তমান শেল ব্যবহারকারীকে ব্যবহার করে। এই ব্যবহারকারীর প্রয়োজনীয় অনুমতি নেই। catএটির জন্য সম্পূর্ণ অকেজো।
এফ

উত্তর:


30

আর একটি বিকল্প যা স্টাফগুলি পিছনে এবং তারপরে পাইপ এড়ানো /dev/zeroযায়

sudo command | sudo dd of=FILENAME

1
ঠিক আমি খুঁজছেন ছিল কি. দুর্দান্ত ধন্যবাদ
এফ

4
superuser.com/a/850294/68284 অতিরিক্ত সংযোজন জন্য অতিরিক্ত oflag=append conv=notruncবিকল্প বর্ণনা করে dd
এফ

6

ddসমাধান এখনও stdout- এ আবর্জনা ছাপে:

$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s

statusবিকল্পটি ব্যবহার করে এড়ানো যায় :

command | sudo dd status=none of=FILENAME

আরেকটি আকর্ষণীয় সম্ভাবনা (যাইহোক লিনাক্সের জন্য):

command | sudo cp /dev/stdin FILENAME

একটি ফাইলের মধ্যে TTY ইনপুট অনুলিপি করতে, আমি প্রায়শই এটি করি:

sudo cp /dev/tty FILENAME

এটি খুব খারাপ টি-তে স্টডআউট দমনের কোনও বিকল্প নেই।


4

আপনি একটি স্ক্রিপ্ট ব্যবহার করতে পারেন। অর্থাত্ এ জাতীয় কিছু রাখুন $HOME/bin/stee, 0teeবা অনুরূপ:

#!/bin/bash

argv=
while [[ "$1" =~ ^- ]]; do
    argv+=" $1"
    shift
done

sudo tee $argv "$1" > /dev/null

#!/bin/bash

sudo tee "$@" > /dev/null

এটি কার্যকর করার যোগ্য করুন:

$ chmod 755 স্টি

এখন করুন:

$ ls -la | স্টিএএ / রুট / ফুও


1
একটি স্ক্রিপ্ট লেখা এবং আমি যে সমস্ত সিস্টেমে কাজ করি সেগুলিতে এটি স্থাপন করা আমি যা চেয়েছিলাম তা ঠিক তা নয়, তবে যতক্ষণ না কেউ ইতিমধ্যে বিদ্যমান সরঞ্জামটির নাম দেয়, আমি মনে করি আমি আপনার সমাধান নিয়ে যাব।
এফ

2
প্রকৃতপক্ষে. এটি নিজে দেখতে চাই। আমি সিতে অনেক আগে একটি প্রোগ্রাম লিখেছিলাম যা আপনি যা বলেছিলেন তা করেছেন, তবে এটি অনেক দিন গেছে এবং ভুলে গিয়েছে। এটির জন্য কখনই আগ্রহ ছিল না। তবে আবার আমি আসলে এটির খুব বেশি বিজ্ঞাপন দিইনি।
লুকা স্টেইন

2

আপনি আপনার পুরো কমান্ডটি sudo এ গুটিয়ে রাখতে পারেন, সুতরাং শেল নিজেই, পাশাপাশি পুনঃনির্দেশগুলি যেমন সম্পাদিত হয় root:

sudo sh -c 'do_something > FILENAME'

-1

এটি করার জন্য সরাসরি কোনও প্রোগ্রাম নেই (এটি কেবলমাত্র কার্যকর সময় হতে পারে), তবে আপনি সহজেই নিজের লেখা লিখতে পারেন। আপনি প্রোগ্রাম চাই না, তাহলে আপনি যে একই জিনিস আছে একটি সহজ শেল স্ক্রিপ্ট লিখতে পেরেছিলেন: cat > $1। এটি এটিকে ইনলাইন রাখার চেয়ে আলাদা (যেমন কাঠের কাঠের পরামর্শ দেওয়া হয়েছে) কারণ সুডো পুনঃনির্দেশ সহ পুরো স্ক্রিপ্টে প্রযোজ্য।


-2

আমি জানি কিছুটা দেরি হয়ে গেছে, তবে এই জাতীয় ক্ষেত্রে আমি কী করি (যখন কোনও 'ফ্ল্যাট' স্টডআউট তবে একটি অস্থায়ী ফাইলও প্রয়োজন হয়):

tee whatever | grep -v ""

এই আদেশটি কী করছে তা আপনি আরও বিস্তারিতভাবে বলতে পারেন?
ভিলিক্স

টি> / দেব / নাল হিসাবে একই, তবে পরিবর্তে কোনও গ্রেপের সাথে পাইপিং যা কোনও কিছুই মিলে না।
00 প্রোমিথিউস

এটি আউটপুটটিকে পুনর্নির্দেশের চেয়ে আরও হ্যাকী শোনায় /dev/nullএবং কমান্ডটি আরও ছোট করে না। মূল পদ্ধতির পরিবর্তে এটি ব্যবহার করে কী সুবিধা হবে?
ওয়াল্ডরিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.