2014-05-24 14 views
9

Tôi có một tác vụ Grunt thực thi tệp .cmd trên máy cục bộ để thực hiện việc đó. Tôi cần sử dụng tác vụ này trên máy chủ CI, máy Linux. Tôi có liên quan .sh (shell script cho Linux) cho điều đó. Tôi cần một cách để thực hiện hai điều này mà không thay đổi Gruntfile của tôi.Thực thi tập lệnh hệ điều hành cụ thể trong nút/Grunt

Hiện tại tôi phải thay đổi Gruntfile của mình để làm cho nó hoạt động cục bộ cho các cửa sổ và sử dụng tệp từ xa .sh.

Bất kỳ giải pháp nào để làm tương tự đều được chào đón. Phát hiện hệ điều hành cơ bản? Hoặc một cách để gọi cùng một lệnh mà nội bộ gọi lệnh hệ điều hành cụ thể?

Trả lời

19

Bạn có thể tận dụng lợi thế của nút của process.platform:

process.platform
nền tảng gì bạn đang chạy trên: 'darwin', 'freebsd', 'Linux', 'SunOS' hoặc 'win32'

console.log ('Nền tảng này là' + process.platform);

Sau đó trong mã, tùy chọn thêm các phần mở rộng tập tin dựa trên rằng:

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

Chính xác những gì tôi đang tìm kiếm ... Cảm ơn câu trả lời .... – Vishwanath

+0

'win32' = cửa sổ; 'darwin' = Mac; 'linux' = linux. Không có ý tưởng những gì khác 2 là cho. Bất cứ ai biết tại sao Mac được gọi là 'darwin'? –

+0

@DanT vì điều này: https://en.wikipedia.org/wiki/Darwin_(operating_system) google là bạn của bạn! –

0

Sử dụng grunt vỏ hoặc bất kỳ công cụ lệnh shell khác, tận dụng những điểm tương đồng giữa chiến thắng và * vỏ nix, đặc biệt là ||. Các cmd đầu tiên sẽ thất bại trên * nix và dự phòng để sh:

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

Lệnh Travis CI chạy sh, nhưng [** Tôi nhận được cảnh báo và xây dựng không thành công **] (https://travis-ci.org/Kristinita/SashaPelicanTest/jobs/348635075#L721). Cảm ơn. –

Các vấn đề liên quan