質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4840閲覧

node.js シェルコマンド実行(execSync)

hiroki88

総合スコア66

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/27 02:14

編集2020/07/27 02:15

node内でコマンド実行を行いたくchild_processを使用し同期的にコマンドの実行を行っているのですが
1点分からないことがあり質問させて頂きました。

node

1const { execSync } = require('child_process') 2 3execSync('ls sample')

上記の様に単発の実行の場合は問題ないのですが

node

1const { execSync } = require('child_process') 2 3execSync(sampleディレクトリに移動) 4execSync(sampleディレクトリでsample.txtを作成)

上記の様に単発ではなく連続でコマンドの実行を行いたいです。
ただ調べたときにコマンド実行を行った場合、呼び出すごとにそれぞれシェルを開いて
実行するためコマンド操作を繋げて実行をすることはできないとでてきました。

node

1const { execSync } = require('child_process') 2 3execSync(sampleディレクトリに移動)←シェルを起動 4execSync(sampleディレクトリでsample.txtを作成)←別のシェルを起動

なんとかつなげてコマンドを実行できる方法はないでしょうか?
あるディレクトリでgulpコマンドを実行したいのですがnodeで実行した時の
カレントディレクトリが実行したいディレクトリと違う場所なので困っています...。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べた感じ
Node.jsで複数コマンドを処理する方法がないようですね。

ですが、質問内容に関しての回避策のみ2個見つけました。

  • execSync実行時のカレントディレクトリを指定
  • Node.jsのカレントディレクトリを変更(process.chdir)

後者は多分イケる程度ですが、
前者は確実に動作するでしょうし、
カレントディレクトリというグローバル変数の値を使わないのでこちらが推奨でしょう。

ドキュメント: child_process.execSync(command, options)

execSyncには省略可能な第2引数が存在します。
それのcmdキーがまんま質問内容の要望である「子プロセスの現在の作業ディレクトリ」の指定です。
これに移動先のパスをString型で渡してやれば完了です。

js

1const { execSync } = require('child_process') 2 3execSync(`touch sample.txt`, {cmd: 'sampleディレクトリ'})

もし、純粋な複数コマンドにしたければ、
シェルスクリプト(bash)ファイルを作成して、
その中で複数コマンドを実現し、そのファイルを実行するような作りにする必要がありそうですね。

投稿2020/07/27 03:24

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroki88

2020/07/27 03:34

ご丁寧な回答頂きましてありがとうございます。 非常に分かりやすく理解させて頂きました。 第二引数にコマンドを実行したディレクトリを指定してあげればよろしいんですね!! さっそくしてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問