সংগঠন-মোড: পরবর্তী উত্স ব্লকে স্টিডিন হিসাবে পাইপ উত্স ব্লক আউটপুট


11

আমি একটি উত্স ব্লকের আউটপুটটিকে স্ট্যান্ডার্ড ইনপুট হিসাবে পরবর্তী উত্স ব্লকে পাইপ করার চেষ্টা করি। আমার এতদূর যা আছে তার উদাহরণ এখানে:

Create stdin data:
#+header: :exports code
#+header: :results output
#+begin_src sh
echo "That goes to the next"
#+end_src

#+name: piped
#+RESULTS:
: That goes to the next 

Use "piped" as stdin:
#+header: :exports results
#+header: :stdin piped
#+header: :results output
#+begin_src sh
VALUE=$(cat)
echo "I got:"
echo "$VALUE"
#+end_src

এটির সাথে আমার সমস্যাগুলি হ'ল:

  • আমাকে হিট করে প্রথম ব্লকের ফলাফলটি ম্যানুয়ালি তৈরি করতে হবে C-c C-c

  • ফলাফলটি অবশ্যই org- বাফারে অন্তর্ভুক্ত করা উচিত (অন্যথায় বড় আউটপুট প্রয়োজন হয় না)

  • ফলাফলটির নাম নিজেই দিতে হবে

এটি করার কোনও কার্যকরী বা আরও ভাল উপায় আছে কি?

উত্তর:


10

ফলাফলের পরিবর্তে এসসিআর ব্লকটির নামকরণ করে আপনার কোড ঠিক করার এখানে একটি সহজ উপায়:

#+name: piped
#+header: :exports code
#+header: :results output
#+begin_src sh
echo "That goes to the next"
#+end_src

#+RESULTS:
: That goes to the next 

#+header: :exports results
#+header: :stdin piped
#+header: :results output
#+begin_src sh
VALUE=$(cat)
echo "I got:"
echo "$VALUE"
#+end_src

#+results:
: I got:
: That goes to the next

1
খুব ভাল, ধন্যবাদ, যে সত্যিই সাহায্য করেছে।
থেলডোরিয়া

3

আমার অনুরূপ ব্যবহারের ঘটনা ঘটেছে, এবং একটি সাধারণ রফতানিকারককে ঘূর্ণিত করেছি যা আমাকে স্টিডিনের উত্স / ইনপুটটির জন্য জসন-মোড ব্যবহার করতে দেয়:

;;; ob-passthrough.el ---  passthrough evaluator          -*- lexical-binding: t; -*-

;; this ob evaluates the block as ifself, so it can be used as input
;; for another block

(require 'ob)

(defun org-babel-execute:passthrough (body params)
  body)

;; json output is json
(defalias 'org-babel-execute:json 'org-babel-execute:passthrough)

(provide 'ob-passthrough)
;;; ob-passthrough.el ends here

তারপরে, (passthrough . t)org-babel-list-langauges- এ যুক্ত করুন এবং এখানে এটি কার্যকর রয়েছে:

#+NAME: json-test
#+BEGIN_SRC json
  {"greet": "hello, world"}
#+END_SRC

#+HEADER: :stdin json-test
#+BEGIN_SRC sh
  jq .greet
#+END_SRC

#+RESULTS:
: hello, world

2

"নয়েব" রেফারেন্স ব্যবহার করে অন্যের থেকে একটি এসসিআর ব্লক কল করুন (দেখুন (info "(org) Noweb reference syntax")):

#+name: input
#+header: :exports code
#+header: :results output
#+begin_src sh
echo "That goes to the next"
#+end_src

#+header: :exports results
#+header: :results output :noweb no-export
#+begin_src sh
VALUE=$(<<input>>)
echo "I got:"
echo "$VALUE"
#+end_src

#+results:
: I got:
: That goes to the next

1
এটি দুর্দান্ত, জেনে রাখা ভাল, ধন্যবাদ দুর্ভাগ্যক্রমে দ্বিতীয় উত্স কোড ব্লকের সত্যই স্টিডিন ব্যবহার করতে হবে। খোলের ব্যবহার catকেবল একটি সাধারণ উদাহরণ ছিল।
থেলডোরিয়া

0

এই সমস্যাটি সমাধানের আরেকটি উপায় হ'ল ইনপুটটিকে একটি এক্সপাম বা কোয়েট ব্লক হিসাবে নামকরণ করা যদি ইনপুটটি সত্যই স্থির থাকে। এটার মতো কিছু:

#+NAME: some-json
#+BEGIN_QUOTE
{"label": "Hello json"}
#+END_QUOTE

বা আপনি যদি পছন্দ করেন তবে একটি উদাহরণ:

#+NAME: some-json-2
#+BEGIN_EXAMPLE
{"label": "ehlo json"}
#+END_EXAMPLE

তারপরে আপনার কোডটি মূল্যায়ন করতে ইচ্ছুক নামগুলিতে ব্লকগুলি উল্লেখ করুন; এখানে আমরা উদ্ধৃতি উদাহরণ ব্যবহার:

#+NAME: the-code
#+HEADER: :stdin some-json
#+BEGIN_SRC shell
jq .label
#+END_SRC

যেহেতু some-jsonব্লকের মান অচল, সুতরাং এটির মূল্যায়ন করার দরকার নেই। মূল্যায়ন the-codeব্লক দেয়:

#+RESULTS: the-code
: Hello json
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.