É possível alimentar o Open Office via STDIN?

6

Eu tenho um documento Open Office Spreadsheet armazenado dentro de uma variável bash. Eu quero fazer algo como o seguinte para alimentar o Open Office via STDIN :

echo "$openOfficeDoc" | ooffice

Mas isso não funciona.

Nota: O conteúdo da variável bash não deve ser gravado em disco.

Vou enfatizar que estou tentando passar para o Open Office os dados reais do arquivo.

Estou tentando armazenar senhas em um arquivo de planilha do Open Office. As senhas são criptografadas usando GPG. Não quero que as senhas sejam gravadas no disco por motivos de segurança.

O valor da variável bash é um blob binário de um documento Open Office Spreadsheet. Não é não ASCII.

O código bash que usei para criar o blob é:

data=$(cat "Encrypted.gpg" | gpg -u "Dor" -d)

Embora Encrypted.gpg seja um arquivo criptografado de uma planilha do Open Office.

É possível alimentar o Open Office via STDIN?

    
por Dor 17.09.2013 / 19:22

7 respostas

10

Eu não acho que o OpenOffice possa ser convencido a ler sua entrada padrão. Mas isso não importa. Basta gravar os dados em um arquivo temporário.

Você não quer que as senhas sejam gravadas no disco. Isso é bom. Escreva-os em um arquivo que não esteja armazenado no disco.

Muitos sistemas usam um sistema de arquivos na memória (tmpfs) para /tmp . Solaris vem fazendo isso há anos; As distribuições Linux demoraram a chegar ao mix ( Fedora 18 adotou, o Debian e o Ubuntu ainda t budged) por isso normalmente requer que o administrador do sistema configure manualmente . No entanto, as distribuições modernas do Linux montam um sistema de arquivos tmpfs em algum lugar; versões recentes da biblioteca padrão exigem isso. O local padrão para tmpfs é / run , com /run/shm sendo mundialmente gravável (mesmas permissões que /tmp ) , mas algumas distribuições podem não ter ainda; veja /dev/shm e talvez outros locais.

    
por 18.09.2013 / 02:52
3

Importando dados textuais

Suas perguntas não são totalmente claras para mim, mas quase parecem que você tem dados que deseja importar para o OpenOffice. Se esse for o caso, eu usaria uma dessas abordagens abaixo.

arquivo CSV

Eu gravaria esses dados em um arquivo CSV ( .csv ) e depois abriria esse arquivo no OpenOffice.

csv2odf

Outra ideia seria usar a ferramenta de linha de comando csv2odf para gravar seus dados formatados em CSV em um arquivo ODF.

Arquivo real

Apenas abrindo um arquivo

No entanto, se você está simplesmente tentando abrir um documento ODF a partir da linha de comando, você deve ser capaz de fazê-lo da seguinte forma:

$ openoffice "$openOfficeDoc"

Importando dados binários

Piping conteúdo para o OpenOffice

Ao analisar essas diversas formas, não acredito que exista um método que permita fazer o seguinte:

$ echo "$data" | openoffice

O fator limitante não é Linux. Você pode fazer o eco dos dados armazenados nas variáveis, e canalizá-los para as ferramentas que sabem como abrir os dados do arquivo recebido em seu STDIN.

Exemplo

$ echo $data|strings| head -10
[Content_Types].xml 
E'2+
)+Bp_9
no+yV
2q^QF
M xv
C1lA
d:NA
_rels/.rels 
b"gi

O fator limitante aqui é o OpenOffice. Ao olhar através de suas opções, não vi nenhum método para persuadi-lo a abrir dados via STDIN. Só sabe abrir arquivos.

    
por 17.09.2013 / 19:26
1

Use um canal anônimo como o arquivo:

ooffice <(echo "$openOfficeDoc")

Veja também link

    
por 22.04.2014 / 15:08
0

Esta não é realmente uma resposta à sua pergunta, mas uma alternativa completa ao que você está tentando fazer atualmente: basta usar um gerenciador de senhas como Revelation ou armazene suas senhas como texto simples criptografado com GPG.

    
por 17.09.2013 / 20:24
0

Tanto o Apache Open Office quanto o Libre Office têm a capacidade de salvar um arquivo com uma senha - criptografando-o com, por exemplo, blowfish ou AES.

Procure a caixa de seleção "Salvar com senha" na caixa de diálogo "Salvar como". Você será solicitado a fornecer a senha e confirmar a senha.

    
por 18.09.2013 / 03:32
0

Open / Star / Libreoffice pode receber dados de STDIN através da ponte Python-UNO. A entrada pode entrar em qualquer documento do Libreoffice, aqui é um documento do Writer.

Isso foi testado no Ubuntu 16.04 com o Libreoffice5. Você precisa de um interpretador python que tenha as uno libs incluídas! O Libreoffice precisa ser iniciado como um serviço:

# soffice "--accept=socket,host=localhost,port=2002;urp;" --writer
# echo "test" | ./reader_uno.py
#!/usr/bin/python3
import sys
import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
                "com.sun.star.bridge.UnoUrlResolver", localContext )
# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
# access the document's text property
text = model.Text
# create a cursor
cursor = text.createTextCursor()
# read from STDIN and insert the text into the document
for line in sys.stdin:
  sys.stdout.write(line)
  text.insertString(cursor,line, 0 )
ctx.ServiceManager

Mais detalhes podem ser encontrados no meu blog "bitkistl". link

    
por 18.02.2016 / 18:14
0

Existe uma solução apenas para zsh:

oofice =(echo $openOfficeDoc)

Eu uso muito com uma ferramenta cli que produz alguns csv (com o libreoffice, mas é a mesma ideia).

Se você quiser ficar com o bash, você ainda pode instalar o zsh e chamá-lo apenas para este comando:

TMP=$openOfficeDoc zsh -c 'oofice =(echo $TMP)'

NOTA: A notação zsh / bash <() não funciona com ooffice / libreoffice de acordo com o meu teste, veja uma possível explicação porque .

    
por 03.12.2018 / 10:43