2013-04-20 1 views
9

В настоящее время я использую команду grunt-shell для запуска команд оболочки из задачи grunt. Есть ли лучший способ запускать несколько команд в одной задаче, отличной от наложения их вместе с '& &'?Как запустить MULTIPLE команды оболочки в задаче gruntjs?

Мои Gruntfile (частичное):

grunt.initConfig({ 
    shell: { 
    deploy: { 
     options: { stdout: true }, 
     command: 'mkdir -p static/styles && cp public/styles/main.css static/styles' 
    } 
    } 
}); 

Массив команд не работы, но было бы неплохо:

grunt.initConfig({ 
    shell: { 
    deploy: { 
     options: { stdout: true }, 
     command: [ 
     'mkdir -p static/styles', 
     'cp public/styles/main.css static/styles' 
     ] 
    } 
    } 
}); 

ответ

14

Вы можете присоединиться к ним вместе:

grunt.initConfig({ 
    shell: { 
    deploy: { 
     options: { stdout: true }, 
     command: [ 
     'mkdir -p static/styles', 
     'cp public/styles/main.css static/styles' 
     ].join('&&') 
    } 
    } 
}); 

Причина, по которой я решил не поддерживать массивы, заключается в том, что некоторые могут захотеть ; в качестве разделителя вместо &&, что упрощает выполнение вышеуказанного.

+0

Спасибо, иногда очевидный ответ правильный :). Я не так разбираюсь в командной строке, поэтому не знал, допустимо ли использование '&&' здесь. Я бы по-прежнему поддерживал синтаксис массива, поскольку он уже знаком (grunt.registerTask) и, следовательно, идиоматичен. Пользователи могут всегда присоединяться (';') '. –

+2

Использование '&&' приводит к тому, что он выполняет только следующую команду, если предыдущий преуспел. Использование ';' означает, что он будет продолжать выполнять команды независимо. Я обновил документы на примере. Вы не первый спрашиваете об этом :) –

+0

было бы еще лучше, если бы команда могла запускаться параллельно. я не думаю, что метод join() делает это. – the0ther

Смежные вопросы