HOME/Articles/

node.jsでシェルコマンドを実行

Article Outline

シェルコマンドを使いたい

標準モジュールのchild_processを使ってコマンドを実行することができます。

今回はプログラムからアプリケーションの起動を実装します。

シェルコマンド

シェルコマンドでは

$ open -a ApplicationName

で任意のアプリケーションを起動できます。

プログラム

child_processモジュールのexecメソッドを使うことで、内部的にシェルを実行することができます。

callback形式の関数になっているのでpromise化して使用します。

execメソッドにコマンドを渡すとなんでも実行できてしまうので結構危険ですね。 shell injectionと言うらしい。

import { exec } from "child_process";

const execAsync = (command: string): Promise<string> => {
  return new Promise((resolve, reject) => {
    exec(command, (error, stdout, stderr) => {
      if (error) reject(error);
      if (stderr) reject(stderr);
      resolve(stdout);
    });
  });
};

(async function () {
  const result = await execAsync("ls").catch(() => "");
  console.log(result);
})();

resultにlsコマンドの結果が入ります。

やりたかったアプリケーションの起動は execAsync関数の引数を変更するだけですね。

await execAsync('open -a Typora')

Typoraの起動ができます。