8

exec継続的にするには?例えば?ls_cd

私は試した

exec = require('child_process').exec;
exec('cd ~/', 
  function(){
    exec('ls'),
    function(err, stdout, stderr){
      console.log(stdout); // this logs current dir but not ~/'s
    }
  }
)

exec('cd ~/').exec('ls', function(err, stdout, stderr){
  console.log(stdout);
})//this also fails because first exec returns a ChildProcess Object but not itself.
4

4 に答える 4

16

exec と spawn は新しいプロセスを作成するため、これを行うことはできません。しかし、これをシミュレートする方法があります。exec でプロセスを開始し、同時に複数のコマンドを実行できます: コマンド ラインで、同じ行で 3 つのコマンドを実行する場合は、次のように記述します。

cmd1 & cmd2 & cmd3

したがって、3 つのコマンドはすべて同じプロセスで実行され、以前に実行されたコマンドによって変更されたコンテキストにアクセスできます。あなたの例を見てみましょう。あなたは cd ../ を実行し、その後 dir を実行して以前のディレクトリリストを表示したいとします。cmd に次のように記述します。

cd../ & dir

ノード js から、exec でプロセスを開始し、インライン スクリプトを評価する別のノード インスタンスを開始するように指示できます。

var exec = require('child_process').exec;
var script = "var exec = require('child_process').exec;exec('dir',function(e,d,er){console.log(d);});";
script = '"'+script+'"';//enclose the inline script with "" because it contains spaces
var cmd2 = 'node -e '+script;
var cd = exec('cd ../ &'+cmd2,function(err,stdout,strerr)
{
    console.log(stdout);//this would work
})

現在のディレクトリを変更したいだけの場合は、それに関するドキュメントを確認する必要がありますhttp://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

于 2013-01-21T08:47:35.153 に答える
1

cd最初に使用する場合は、 を使用することをお勧めしますprocess.chdir('~/')。その後、シングルexec()は仕事をします。

于 2014-02-03T11:31:49.303 に答える
0

次のように cwd パラメータを指定して exec を呼び出すことができます。

exec('ls -a', {
    cwd: '/Users/user'
}, (err, stdout) => {
    if (err) {
        console.log(err);           
    } else {
        console.log(stdout);
    }
})

ただし、cwd は '~' を認識しないことに注意してください。代わりに process.env.HOME を使用できます。

于 2017-09-07T15:45:23.417 に答える