如何从Calc文档的Basic宏中调用Bash脚本
问题解决:LibreOffice Calc宏调用带空格参数的Bash脚本
核心问题分析
你代码里有两个关键错误:
- LibreOffice Basic中引用变量不需要加
#,#str1是语法错误,应该直接写str1 - 使用
RunApplication("Shell")传递带空格的参数时,直接拼接带单引号的字符串容易出问题,ScriptForge的RunApplication对Shell命令的参数传递有更规范的写法
正确写法示例
方法1:拆分命令与参数(推荐)
RunApplication在Shell模式下,第二个参数是命令路径,后续参数依次是脚本的参数,这样不需要手动处理引号转义:
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge") Dim session As Variant Dim str1 As String session = CreateScriptService("Session") str1 = "ici plusieurs mots" ' 命令路径作为第二个参数,脚本参数作为第三个参数 session.RunApplication("Shell", "/usr/local/bin/essai-macro-bavard.sh", str1)
方法2:正确拼接命令字符串
如果一定要用单字符串传递完整命令,需要确保参数的引号正确包裹,同时修正变量引用错误:
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge") Dim session As Variant Dim str1 As String session = CreateScriptService("Session") str1 = "ici plusieurs mots" ' 去掉#,用双引号包裹整个命令,参数用单引号 session.RunApplication("Shell", """/usr/local/bin/essai-macro-bavard.sh '" & str1 & "'""")
额外检查项
- 确保脚本有可执行权限:在终端执行
chmod +x /usr/local/bin/essai-macro-bavard.sh - 如果脚本放在
$PATH路径下,直接用脚本名也可以,比如session.RunApplication("Shell", "essai-macro-bavard.sh", str1)
内容的提问来源于stack exchange,提问作者Denis M
相关产品推荐
相关产品推荐

