运行shell命令并返回自定义函数的结果输出

时间:2010-06-07 06:18:23

标签: shell macros openoffice-calc openoffice-basic

我想编写一个运行shell命令的自定义OpenOffice函数,并将结果放入调用它的单元格中。我有一个基本的宏工作,但我找不到捕获命令输出的方法。

Function MyTest( c1 )
    MyTest = Shell("bash -c "" echo hello "" ")
End Function

上述内容始终返回0。查看Shell命令的文档,我认为它实际上不会返回STDOUT。

我如何捕获输出以便我可以在我的函数中返回它?

2 个答案:

答案 0 :(得分:1)

您可以将输出重定向到临时文件,然后使用其他命令读入该文件的内容吗?

例如,Shell("bash -c "" echo hello > tmp.txt "" ")

答案 1 :(得分:1)

Kimbal Robinson's answer有效,但有使用文件的缺点。它很慢(与仅使用内存相比),之后你必须删除文件(虽然把它放在/ tmp中,它最终会自动删除)。

另一种方法是通过剪贴板传输数据:

Dim myCommand As String
myCommand = "echo hello world"
Shell ("bash", 1, "-c "" " & myCommand & " | xclip -selection clipboard"" ", true)
' setting the 4th parameter to true ensures that the Shell function will wait until '
' the command terminates before returning '

' then paste the content of the clipboard '
Dim dh As Object
dh = createUnoService("com.sun.star.frame.DispatchHelper")
dh.executeDispatch(StarDesktop.CurrentFrame, ".uno:Paste", "", 0, Array())

这会将命令的输出粘贴到活动文档的当前位置。

请注意,如果命令发出多行,将弹出“文本导入”对话框(我不知道如何防止这种情况)。