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にフィードすることは可能ですか?
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を介してデータを開くように誘導する方法が見つかりませんでした。ファイルを開く方法しか知りません。
ファイルとして無名パイプを使用します。
ooffice <(echo "$openOfficeDoc")
参照 https://stackoverflow.com/questions/345505/how-can-you-diff-two-pipelines-in-bash
Zshのみの解決策があります:
_oofice =(echo $openOfficeDoc)
_
私はそれをいくつかのcsvを出力する私のCLIツールでよく使用します(libreofficeを使用しますが、同じ考えです)。
Bashを使い続けたい場合でも、zshをインストールして、次のコマンドのためだけに呼び出すことができます。
_TMP=$openOfficeDoc zsh -c 'oofice =(echo $TMP)'
_
注:私のテストによると、zsh/bash <()
表記はooffice/libreofficeでは機能しません。 考えられる理由 を参照してください。
Apache OpenOfficeとLibreOfficeはどちらも、ファイルをパスワードで保存する機能を備えています。たとえば、blowfishやAESでファイルを暗号化します。
[名前を付けて保存]ダイアログボックスで[パスワードで保存]チェックボックスを探します。次に、パスワードの入力とパスワードの確認を求められます。
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
これは実際にはあなたの質問に対する答えではありませんが、現在やろうとしていることの完全な代替手段です。 Revelation のようなパスワードマネージャーを使用するか、パスワードをGPG暗号化プレーンテキストとして保存してください。 。