সোর্স ব্লকের সাথে জট বেঁধে যখন STDIN থেকে ব্যবহারকারীর ইনপুট পড়া সম্ভব org-babel-tangle
?
আমি এটি সম্পর্কে সচেতন: অর্গ মোড ব্যাবেল - ইন্টারেক্টিভ কোড ব্লক মূল্যায়ন ।
এটি এই নির্দিষ্ট ব্যবহার-কেস সমাধান করতে সহায়তা করে না, কারণ এটি এখনও শেল থেকে উপযুক্ত এসটিডিন ইনপুট অনুমোদন করে না, তবে কেবল ইমাসে অভ্যন্তরীণভাবে একটি সীমিত ইনপুট অনুকরণ করে ।
পটভূমি
আমি একটি org ফাইল থেকে কিছু টিউটোরিয়াল চালিয়ে নতুন প্রোগ্রামিং ভাষা (পার্ল এবং বাশ) শিখতে org এর বাবেলটি ব্যবহার করতে চাই।
সমস্যাটি হ'ল অনেক টিউটোরিয়াল STDIN এর উপর নির্ভর করে। উদাহরণস্বরূপ, যদি কেউ নিম্নলিখিত পার্ল টিডবিট চালায়:
#+BEGIN_SRC perl :tangle hello-name.pl :results output :export code
use 5.010;
use strict;
use warnings;
say "What is your name?";
my $name=<STDIN>;
say "Hello $name, how are you?";
#+END_SRC
ইমাস্যাকগুলি STDIN- তে সঠিকভাবে কোনও নাম লিখতে ব্যবহারকারীর ইন্টারঅ্যাকশনটির জন্য অপেক্ষা করবে না , এবং এটি অবিলম্বে আউটপুট তৈরি করবে:
#+RESULTS:
: What is your name?
: Hello , how are you?
বাশ উদাহরণ ব্যবহার করে একই জিনিস। এই:
#+BEGIN_SRC sh :results output :export code :tangle dir-input.sh
#!/bin/bash
if [ -z "$TEST_DIR" ]
then
echo "TEST_DIR was not set, please enter the path: "
read input_variable
export TEST_DIR=$input_variable
fi
#+END_SRC
ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করবে না এবং ইমাকগুলি অবিলম্বে এটি ফিরিয়ে দেবে:
#+RESULTS:
: TEST_DIR was not set, please enter the path:
ইমাক্সের কোনও নির্বাহী জড়িত ব্লকে ইনপুটটির জন্য অপেক্ষা করার কোনও দেশীয় উপায় আছে?
যদি তা না হয় তবে দয়া করে কীভাবে কোনও tangle-and-run-via-shell-buffer
ফাংশনের মতো কিছু লিখতে হবে তার জন্য কিছু পয়েন্টার দেবেন:
- কোড ব্লকটি বিন্দুতে সংযুক্ত করুন, প্রদত্ত ফাইলের নাম সহ সংরক্ষণ করুন,
- একটি দৃশ্যমান
shell
বাফারে সংশ্লিষ্ট ফাইলটি চালান , - সম্ভবত ব্যবহারকারীর কাছ থেকে ইনপুট গ্রহণ করা,
- এবং শেষ পর্যন্ত রিপোর্টিং
STDOUT
, যদি কোন হয়#+RESULTS:
?
এই জাতীয় বৈশিষ্ট্যটি যদি অর্গে (এখনও) প্রয়োগ না করা হয়, তবে কীভাবে কেউ এলিসপ দিয়ে এটি প্রয়োগ করতে পারে?
আপডেট: আরও ইমাস এবং এলিসপ ম্যানুয়ালগুলি অনুসন্ধান এবং অধ্যয়নের পরে, মনে হচ্ছে এটি করার উপায়টি কমেন্টের পক্ষে উপার্জন করবে , সম্ভবত make-comint-in-buffer
।
(make-comint-in-buffer "*cmd-buffer*" nil "perl" nil "hello-name.pl")
দুর্ভাগ্যক্রমে, এখনই এটি আমার মাথার উপরে 😣