2014-05-24 4 views
9

Ho un task Grunt che esegue il file .cmd sul computer locale per fare il suo esempio. Ho bisogno di usare questa attività sul server CI, che è una macchina Linux. Ho il relativo .sh (script di shell per Linux) per quello. Ho bisogno di un modo per eseguire questi due senza modificare il mio Gruntfile.Esegui script specifico del sistema operativo nel nodo/Grunt

Attualmente devo modificare il mio Gruntfile per farlo funzionare localmente per Windows e il file remoto utilizza .sh.

Qualsiasi soluzione per fare lo stesso è il benvenuto. Rilevazione del sistema operativo sottostante? O un modo per chiamare lo stesso comando che chiama internamente il comando specifico del sistema operativo?

risposta

19

Si potrebbe approfittare del nodo process.platform:

process.platform
quale piattaforma si sta eseguendo su: 'Darwin', 'FreeBSD', 'Linux', 'SunOS' o 'Win32'

console.log ('Questa piattaforma è' + process.platform);

Poi all'interno del codice, opzionalmente aggiungere le estensioni di file basati su tale:

if (process.platform === "win32") { 
    ext = ".cmd"; 
} else { 
    ext = ".sh"; 
} 
+0

Esattamente quello che cercavo ... Grazie per la risposta .... – Vishwanath

+0

'win32' = finestre; 'darwin' = Mac; 'linux' = linux. Non ho idea di cosa siano gli altri 2. Qualcuno sa perché Mac viene definito "Darwin"? –

+0

@DanT a causa di questo: https://en.wikipedia.org/wiki/Darwin_(operating_system) google è tuo amico! –

0

Utilizzando grugnito-shell o qualsiasi altro strumento di comando shell, approfittare delle somiglianze tra la vittoria e * conchiglie nix, in particolare ||. La prima cmd falliranno su * nix e ripiegate sulla sh:

shell: { 
     options: { 
      stderr: false, 
      failOnError: true 
     }, 
     command: 'cmd command.cmd || sh command.sh' 
    } 
+0

Travis CI esegue il comando sh, ma [** Ricevo un avviso e la build non è riuscita **] (https://travis-ci.org/Kristinita/SashaPelicanTest/jobs/348635075#L721). Grazie. –