Article Outline
node.jsでシェルコマンドを実行
TOC
Collection Outline
最新記事
- Next.js 北九州市のイベント情報を取得する
- Next.js × now がやばい
- 競プロ日記 ABC15
- 競プロ日記 ABC159
- Kaggle 住宅価格予測 単回帰分析してみる
- 単回帰分析のFlow
- React Native Styleをいい感じに
- React Movie Search を TS で.
- useRefの使い方がわからん
- Heroku PostgreSQL の使い方
- ラズパイとLEDマトリクスパネルで遊ぶ
- querySelectorAllで取得した要素は配列ではないらしい
- React HookでTodoアプリを作る
- Kaggle 住宅価格予測 重回帰分析してみる
- Kaggle 住宅価格予測 多項式回帰してみる
- Webフロントのすべて
- 新しいMacBook Airが届いた!
- 日向坂46のニュースをスクレイピング
- イコラブのニュースをスクレイピングする!
- 推しのブログをスクレイピング
シェルコマンドを使いたい
標準モジュールの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の起動ができます。