Lấy cảm hứng từ điều này great post, tôi đang cố gắng sử dụng kết hợp org-mode
và babel
để phát hành truy vấn đến elasticsearch
. Ví dụ, đếm số lượng các mục trong một chỉ số:macro chế độ org bên trong khối mã và sử dụng babel
#+BEGIN_SRC sh
curl -XGET 'http://my.uri.example:8080/index/_count'
#+END_SRC
Đoạn mã trên có thể được đánh giá bằng C-c C-c
khi điểm là trong khối.
Mặt khác, người ta có thể xác định macros trong tài liệu org. Câu hỏi của tôi là: là nó có thể xác định một macro
#+MACRO: live-db http://my.uri.example:8080
và viết lại các khối mã như sau:
#+BEGIN_SRC sh
curl -XGET '{{{live-db}}}/index/_count'
#+END_SRC
Ra khỏi hộp, đối với tôi, nó đã không làm việc ... Nó có vẻ như babel
không mở rộng macro trước khi đánh giá khối. Ý tưởng?
Sửa
Bây giờ, khi tôi biết rằng tôi có thể sử dụng es-mode
, tôi sẽ không để tinh chỉnh câu hỏi của tôi. Hãy xem xét hai yêu cầu sau đây:
#+BEGIN_SRC es :url http://mu.uri.stage:8080
GET /users/_search?pretty
{
"query": {
"match_all":{}
}
}
#+END_SRC
và
#+BEGIN_SRC es :url http://mu.uri.live:8080
GET /users/_search?pretty
{
"query": {
"match_all":{}
}
}
#+END_SRC
Họ chỉ khác nhau trong URL. Tôi muốn xác định hai macro:
#+MACRO staging http://my.uri.stage:8080
#+MACRO live http://my.uri.live:8080
và sau đó sử dụng macro làm biến của các khối. Có thể không?
Hãy chắc chắn rằng bạn kích hoạt việc thẩm định sh
. Thêm nội dung như:
(org-babel-do-load-languages
'org-babel-load-languages
'((sh . t)))
vào .emacs
.
Về câu hỏi đầu tiên của bạn, xem dòng 3088-3089 của ox.el: – fniessen
Macros được mở rộng trước khi mã Babel được đánh giá. – fniessen
(chức năng org-xuất khẩu-như) – fniessen