web-dev-qa-db-ja.com

STDINを介してOpenOfficeにフィードすることは可能ですか?

Open OfficeSpreadsheetドキュメントをbash変数内に保存しています。 STDINを介してOpenOfficeにフィードするには、次のようなことをしたいと思います。

echo "$openOfficeDoc" | ooffice

しかし、それは機能しません。

注:bash変数の内容をディスクに書き込んではいけません。

ファイルの実際のデータをOpenOfficeに渡そうとしていることを強調しておきます。

Open OfficeSpreadsheetファイルにパスワードを保存しようとしています。パスワードはGPGを使用して暗号化されます。セキュリティ上の理由から、パスワードをディスクに書き込みたくありません。

Bash変数値は、Open OfficeSpreadsheetドキュメントのバイナリブロブです。 not ASCIIです。

BLOBの作成に使用したbashコードは次のとおりです。

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

Encrypted.gpgは、OpenOfficeスプレッドシートの暗号化されたファイルです。

STDINを介してOpenOfficeにフィードすることは可能ですか?

6
Dor

OpenOfficeが標準入力から読み取ることを確信できるとは思いません。しかし、それは問題ではありません。データを一時ファイルに書き込むだけです。

パスワードをディスクに書き込まないようにします。それはいいです。 ディスクに保存されていないファイルに書き込みます。

多くのシステムは、/tmpにメモリ内ファイルシステム(tmpfs)を使用します。 Solarisは何年もの間それを行ってきました。 Linuxディストリビューションの組み合わせは遅いので( Fedora 18 採用、DebianとUbuntuはまだ出ていない)、通常はシステム管理者が 手動で設定 =。ただし、最近のLinuxディストリビューションは、tmpfsファイルシステムをどこかにマウントします。標準ライブラリの最近のバージョンではそれが必要です。 tmpfsの標準の場所は / run で、/run/shmは誰でも書き込み可能です(/tmpと同じ権限)が、一部のディストリビューションにはまだそれがない場合があります; /dev/shmとおそらく他の場所を見てください。

テキストデータのインポート

あなたの質問は私には完全には明確ではありませんが、OpenOfficeにインポートしたいデータがあるかのように読めます。その場合は、以下のいずれかのアプローチを使用します。

CSVファイル

そのデータをCSVファイル(.csv)に書き出してから、そのファイルをOpenOfficeで開きます。

csv2odf

もう1つのアイデアは、コマンドラインツールcsv2odfを使用して、CSV形式のデータをODFファイルに書き込むことです。

実ファイル

ファイルを開くだけ

ただし、コマンドラインからODFドキュメントを開こうとしているだけの場合は、次のように実行できるはずです。

$ openoffice "$openOfficeDoc"

バイナリデータのインポート

OpenOfficeへのコンテンツのパイピング

これをいくつかの方法で見ると、次のことができる方法があるとは思いません。

$ echo "$data" | openoffice

ただし、制限要因はLinuxではありません。変数に格納されているデータを適切にエコーし、STDINで受信ファイルデータを開く方法を知っているツールにパイプすることができます。

$ 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

ここでの制限要因はOpenOfficeです。そのオプションを調べたところ、STDINを介してデータを開くように誘導する方法が見つかりませんでした。ファイルを開く方法しか知りません。

3
slm

ファイルとして無名パイプを使用します。

ooffice <(echo "$openOfficeDoc")

参照 https://stackoverflow.com/questions/345505/how-can-you-diff-two-pipelines-in-bash

1
Christian U.

Zshのみの解決策があります:

_oofice =(echo $openOfficeDoc)
_

私はそれをいくつかのcsvを出力する私のCLIツールでよく使用します(libreofficeを使用しますが、同じ考えです)。

Bashを使い続けたい場合でも、zshをインストールして、次のコマンドのためだけに呼び出すことができます。

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

注:私のテストによると、zsh/bash <()表記はooffice/libreofficeでは機能しません。 考えられる理由 を参照してください。

0
autra

Apache OpenOfficeとLibreOfficeはどちらも、ファイルをパスワードで保存する機能を備えています。たとえば、blowfishやAESでファイルを暗号化します。

[名前を付けて保存]ダイアログボックスで[パスワードで保存]チェックボックスを探します。次に、パスワードの入力とパスワードの確認を求められます。

0
cas

Open/Star/Libreofficeは、Python-UNOブリッジを介してSTDINからデータを受信できます。入力は、Libreofficeドキュメントに入れることができます。ここではWriterドキュメントです。

これは、Libreoffice5を使用してUbuntu16.04でテストされました。 unolibsが含まれているpythonインタープリターが必要です!Libreofficeをサービスとして開始する必要があります:

# 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

詳細については、私のブログ「bitkistl」をご覧ください。
http://www.bitkistl.com/2016/02/libreopenstaroffice-hints-and-tips.html

0
Peter Bauer

これは実際にはあなたの質問に対する答えではありませんが、現在やろうとしていることの完全な代替手段です。 Revelation のようなパスワードマネージャーを使用するか、パスワードをGPG暗号化プレーンテキストとして保存してください。 。

0