ফাইল থেকে স্টিডিন নিন তবে এটি টার্মিনালে প্রদর্শিত হবে


9

আমার একটি প্রোগ্রাম রয়েছে যা প্রোগ্রাম চালুর সাথে সাথে আমাকে ইনপুট ডেটা প্রয়োজন। এরকম কিছু কল্পনা করুন:

$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...

এখন, আমার বিরুদ্ধে আমার প্রোগ্রাম চালানোর জন্য বেশ কয়েকটি পরীক্ষার ইনপুট রয়েছে। এগুলির সকলের মধ্যে এমন কিছু রয়েছে:

Arthur, King of the Britons
To seek the Holy Grail
...

যাইহোক, আমার কয়েকটি পরীক্ষার স্ক্রিপ্টগুলি ব্যর্থ হয়েছে এবং দুর্ভাগ্যক্রমে আমার পক্ষে টার্মিনালটি দেখতে যেমন ঠিক তেমন ব্যর্থ হয়েছিল তা বোঝা খুব কঠিন:

$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...

কোনও উপায় আছে যে আমি এখনও stdinকোনও ফাইলের মাধ্যমে ইনপুট দিতে পারি , তবে এখনও টার্মিনালটি এমনভাবে উপস্থিত হয়েছে যেন আমি এটি সমস্ত টাইপ করেছি?

লিনাক্স মিন্ট 16 যদি আমার ওএস হয় তবে তা গুরুত্বপূর্ণ।


এটি কীভাবে করা যায় তা আমি জানি না তবে আপনার "টি" ডিভাইস ব্যবহার করে এটি "সক্ষম" করা উচিত। কিছু সংকেতের জন্য stackoverflow.com/questions/8514735/… দেখুন ।
জো

উত্তর:


13

আপনার প্রোগ্রামে কেবল ইনপুট বাফার করে দেওয়া ইনপুট পুনঃনির্দেশ (./program <আর্থার.txt) ব্যবহার না করে, আপনার প্রশ্নের "অপেক্ষা" করার অপেক্ষা রাখে এবং একের পর এক উত্তর প্রেরণ করার জন্য আপনার সরঞ্জামগুলি ব্যবহার করা উচিত।

#!/usr/bin/expect
log_user 0
spawn ./program
log_user 1

expect {
  "*?"
}
send "Arthur, King of the Britons\r"

expect {
  "*?"
}
send "To seek the Holy Grail\r"

expect {
  "*?"
}
send "...\r"

আরও ভাল উদাহরণ: http://www.pantz.org/software/expect/expect_ex উদাহরণ_ and_tips.html


উপরের কাজটি পেয়ে গেলে আপনি এটিকে এমন একটি expectস্ক্রিপ্টে রূপান্তর করতে পারেন যা জানে যে আপনার প্রোগ্রামের সমস্যাগুলি কী উত্সাহিত করবে এবং "আপনার পছন্দের রঙটি কী?" এর প্রতিক্রিয়া হিসাবে আপনার প্রোগ্রামটিকে তৃতীয় ইনপুট লাইন খাওয়ানো জানে? প্রশ্ন - এবং তারপরে expectস্ক্রিপ্টটিতে arthur.txtহার্ড-কোডেড না হয়ে এই ইনপুটগুলি পেতে ফাইল (বা অন্য কোনও নির্দিষ্ট, যথাযথ কাঠামোগত, ফাইল) পড়তে হবে have
জি-ম্যান বলেছেন 'মন ইনস্টল করুন মনিকা'

7

এটি ঠিক এর teeজন্য ব্যবহৃত হয়।

উদাহরণ স্বরূপ:

$  echo foo | tee >( grep bar ) 
foo
$

এখানে যা ঘটে তা হ'ল টি স্ট্যান্ডিন নেয় এবং এটি অনুলিপি করে আবার পাইপ করে দেয়। পাইপের জন্য যৌথভাবে যেমন।

আরও তথ্যের জন্য ম্যানপেজ টি (1) দেখুন।


1
যদিও বার্তাগুলি সঠিক ক্রমে উপস্থিত হওয়ার নিশ্চয়তা রয়েছে? এমনকি বাফারিং উপেক্ষা করা, এটি মূলত দুটি প্রোগ্রাম যা একই সাথে চলছে এবং একই পর্দায় লেখার চেষ্টা করছে।
ফেডেরিকো পোলোনি

1
আমার দৃশ্যে এটি কীভাবে ব্যবহার করবে? আমি manpages পড়া চেষ্টা করেছি, কিন্তু সেখানে শুধু আমার usecase চেয়ে এই সরঞ্জামে আরো অনেক হবে বলে মনে হয়, এবং আমি বেশ কিভাবে আমি এটা ব্যবহার চাই যখন এটা আসে পেয়ে ছিল না program.exeএবং arthur.txt
জমবেজী

@ জামবেজীcat arthur.txt | tee >( program.exe )
গ্রোনস্টাজ

2
টিই প্রথম জিনিসটি আমার মনেও আসছিল। তবে আমি এটি চেষ্টা করেছি এবং নিশ্চিত হয়েছি এটি কার্যকর হয় না। আউটপুট পৃথকভাবে প্রদর্শিত হবে। আমার পরীক্ষায় আর্থার.টেক্সট এর লিখিত সামগ্রীটি প্রথমে প্রদর্শিত হবে, তারপরে প্রোগ্রাম.এক্সে থেকে প্রশ্নগুলি শুরু হবে। আপনি এটি প্রত্যাশার "আনফার" দিয়ে কাজ করতে সক্ষম হতে পারেন তবে আমার কোনও ভাগ্য হয়নি।
কিছু ব্যবহারকারী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.