Como incluir a saída de um comando shell no bloco de código-fonte do modo org?

12

Por exemplo, recebi uma demonstração para mostrar um comando e sua saída e quero inseri-los em um .orgarquivo como um trecho de código-fonte de C ou algo assim. Desejo, então, poder exportar o arquivo para um arquivo HTML e destacar o bloco como os exemplos de muitos livros.

Por exemplo, eu tenho

#+BEGIN_SRC shell
$ ls
dir1
dir2
file1
file2
...
or any other examples like this
...
#+END_SRC

mas não pode ser convertido em HTML: uma mensagem de erro que lê

shell-mode: Argumento de tipo errado: processp, nil

aparece o tempo todo. Que modo devo usar para substituir shelle, se não devo usar o #+BEGIN_SRC...#+END_SRCformato, o que devo usar?

CodyChan
fonte

Respostas:

16

Se você deseja construir exemplos você mesmo (é isso que estou recebendo da sua pergunta, mas me corrija se estiver errado), use um EXAMPLEbloco em vez de um SRCbloco:

#+BEGIN_EXAMPLE
$ ls
dir1
dir2
file1
file2
...
#+END_EXAMPLE

Ao exportar para HTML, esse bloco se torna:

<pre class="example">
$ ls
dir1
dir2
file1
file2
...
</pre>

Como você pode ver, o conteúdo do bloco exportado é exatamente o mesmo que o conteúdo do EXAMPLEbloco original .


Se você realmente deseja executar um ou mais comandos para produzir saída dinamicamente e incluir os comandos e os resultados no seu documento HTML, precisará modificar o SRCbloco para que fique assim:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Se a saída do lscomando inclui os diretórios e arquivos que você listou no seu exemplo ( dir1, dir2, file1, file2), este vai exportar para:

<div class="org-src-container">
  <pre class="src src-sh">
    ls
  </pre>
</div>

<table>
  <colgroup>
    <col class="left" />
  </colgroup>
  <tbody>
    <tr>
      <td class="left">dir1</td>
    </tr>
    <tr>
      <td class="left">dir2</td>
    </tr>
    <tr>
      <td class="left">file1</td>
    </tr>
    <tr>
      <td class="left">file2</td>
    </tr>
  </tbody>
</table>

Como você pode ver, o próprio código é agrupado em um bloco de código e os resultados são listados em uma tabela.

Observe que você precisará ativar o suporte para shblocos de código explicitamente via:

(require 'ob-sh)
(org-babel-do-load-languages 'org-babel-load-languages '((sh . t)))

Isso ocorre porque, por padrão, o Org Babel somente habilita o suporte a blocos de código Emacs Lisp (como explicado aqui ).

itsjeyd
fonte
Obrigado pela obcoisa, eu tenho mais dois problemas 1: existe algum built-in shortcutpara inserir o par de BEGIN_EXAMPLE, gostaria <s then TABde inserir o BEGIN_EXAMPLEalém para definir um trecho yasnippet? 2: Recebi org-html-handle-links: Wrong type argument: stringp, niluma mensagem de erro após alterar o, BEGIN_EXAMPLEmas nada mais, deve haver algo errado com o link no meu arquivo organizacional, existem muitos deles, como posso org-exportmostrar mais detalhes, como o número da linha que está errado ao falhar na exportação ??
CodyChan
Respondendo à sua primeira pergunta: Sim, existe, é <eseguida por TAB. Consulte Modelos fáceis para obter uma lista completa.
precisa saber é o seguinte
Quanto à sua segunda pergunta: não sei ao certo o que você quer dizer. Que link (s)? Não há links no seu exemplo original. Como um conselho geral, tente obter um exemplo mínimo trabalhando primeiro. Coloque o EXAMPLEbloco como mostrado na minha resposta em um novo arquivo por si só. Não adicione mais nada. Em seguida, tente exportá-lo e veja o que acontece. Se isso funcionar, adicione gradualmente mais itens e continue exportando à medida que faz. Se você encontrar um erro em algum momento, saberá que a última adição (ou alteração) que você fez está causando o erro.
precisa saber é o seguinte
O problema da minha postagem original foi resolvido por BEGIN_EXAMPLE. O erro BEGIN_EXAMPLE está localizado por org-exportsi só, então eu sei que é o problema BEGIN_SRC, mas há muito mais no meu arquivo original; depois org-export, apenas a org-html-handle-links: Wrong type argument: stringp, nilmensagem de erro aparece e não sei onde está a posição exata.
CodyChan #
@CodyChan Não estou seguindo. Se você quiser que eu dê uma olhada no conteúdo do arquivo que você está tentando exportar, adicione-o à sua pergunta (você pode removê-lo novamente mais tarde).
precisa saber é o seguinte