0

我通过以下代码使用 XUL 在命令提示符下成功执行了命令和 .bat 文件:

Components.utils.import("resource://gre/modules/FileUtils.jsm");

var env = Components.classes["@mozilla.org/process/environment;1"]
                    .getService(Components.interfaces.nsIEnvironment);
var shell = new FileUtils.File(env.get("COMSPEC"));

var args = ["/c", "cd C:/ffmpeg/bin & record.bat"];

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(shell);
process.runAsync(args, args.length);

但是现在我将 .bat 文件更改为 .sh 文件以在 Ubuntu 上运行,并且需要使用相同的代码在终端中运行命令,所以我需要将环境变量“COMSPEC”更改为适用于终端的东西,我发现它是“ TERM”但没有用。

是否有任何其他环境变量或方法来完成此任务?

4

1 回答 1

0

在 Linux 上运行 shell 文件的命令是固定的 - 它始终是/bin/sh. 所以你会这样做:

var shell = new FileUtils.File("/bin/sh");
var args = ["-c", "record.sh"];

这不是完全正确的方法 - 如果您想绝对正确地执行此操作,您将查看脚本文件并解析第一行(通常类似于#!/bin/sh)。在一般情况下,您不会检查文件扩展名,而是检查文件是否可执行(在类 Unix 系统上,这完全独立于文件扩展名)。但我猜你对一般情况不是很感兴趣。

于 2012-05-28T11:35:24.780 回答