我有一个 Open Office 电子表格文档存储在 bash 变量中。我想做类似以下的事情来通过以下方式提供 Open Office STDIN
:
echo "$openOfficeDoc" | ooffice
但这不起作用。
笔记:bash 变量的内容不得写入磁盘。
我要强调的是,我正在尝试将文件的实际数据传递给 Open Office。
我正在尝试将密码存储在 Open Office 电子表格文件中。密码使用 GPG 加密。出于安全原因,我不希望将密码写入磁盘。
bash 变量值是 Open Office Spreadsheet 文档的二进制 blob。这是不是ASCII。
我用来创建 blob 的 bash 代码是:
data=$(cat "Encrypted.gpg" | gpg -u "Dor" -d)
WhileEncrypted.gpg
是 Open Office 电子表格的加密文件。
是否可以通过 STDIN 向 Open Office 提供数据?
答案1
我认为 OpenOffice 无法被说服从其标准输入中读取内容。但这并不重要。只需将数据写入临时文件即可。
您不希望将密码写入磁盘。没关系。将它们写入未存储在磁盘上的文件。
许多系统使用内存文件系统 (tmpfs) 来存储/tmp
. Solaris 多年来一直这样做。 Linux 发行版的混合速度很慢(软呢帽 18采用了它,Debian和Ubuntu仍然没有改变)所以通常需要系统管理员手动设置。然而,现代 Linux 发行版在某处安装了 tmpfs 文件系统;标准库的最新版本需要它。 tmpfs 的标准位置是/run
,/run/shm
具有全局可写性(与 相同的权限/tmp
),但某些发行版可能还没有;看看/dev/shm
也许还有其他地方。
答案2
导入文本数据
我不太清楚您的问题,但看起来好像您有想要导入 OpenOffice 的数据。如果是这种情况,那么我将使用下面的方法之一。
CSV 文件
我会将这些数据写入 CSV 文件 ( .csv
),然后在 OpenOffice 中打开该文件。
csv2odf
另一个想法是使用命令行工具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
使用匿名管道作为文件:
ooffice <(echo "$openOfficeDoc")
也可以看看https://stackoverflow.com/questions/345505/how-can-you-diff-two-pipelines-in-bash
答案4
这并不是您问题的真正答案,而是您当前尝试执行的操作的完整替代方案:只需使用密码管理器,例如启示,或将您的密码存储为 GPG 加密的纯文本。