J'ai trouvé l'implémentation suivante. Je l'utilise pour des projets de développement web. Consoles pour les exécuteurs de tâches (ex: gulp), git, compilateurs javascript (ex: typescript), etc. Le but était d'ouvrir 4 fenêtres de console et de changer de répertoire dans le répertoire où j'ai exécuté le * .cmd. Je ne voulais pas avoir plusieurs copies du script batch car je devais le changer. Je ne voulais pas que le shell soit batch et je voulais que le shell soit bash. Je suis sur Windows, donc, cygwin est nécessaire pour le shell bash.
J'ai créé un fichier .cmd arbitrairement nommé. J'ai appelé le mien 4 consoles.cmd
. Cygwin est installé (la version 64 bits dans mon cas). Le chere
package Cygwin est également installé et requis.
4 consoles.cmd
contenu:
@echo off
for %%i in ("%~dp0..\..") DO (set dirVar=%%~ni)
for %%i in ("%~dp0.") DO (set dir2Var=%%~ni)
set finalValue=%dirVar% %dir2Var%
start C:\"Program Files"\ConEmu\ConEmu64.exe -cmdlist ^
C:\cygwin64\bin\bash -c "/bin/xhere /bin/bash.exe" -cur_console:fna:t:"%finalValue%":C:"C:\cygwin64\Cygwin.ico" ^|^|^| ^
C:\cygwin64\bin\bash -c "/bin/xhere /bin/bash.exe" -cur_console:s1TVna:t:"%finalValue%":C:"C:\cygwin64\Cygwin.ico" ^|^|^| ^
C:\cygwin64\bin\bash -c "/bin/xhere /bin/bash.exe" -cur_console:s1THna:t:"%finalValue%":C:"C:\cygwin64\Cygwin.ico" ^|^|^| ^
C:\cygwin64\bin\bash -c "/bin/xhere /bin/bash.exe" -cur_console:s2THna:t:"%finalValue%":C:"C:\cygwin64\Cygwin.ico"
J'ai mis 4 consoles.cmd
un service d'hébergement de fichiers à des fins de sauvegarde au cas où mon disque dur tombe en panne. Aussi pour plus de commodité lors du partage entre des machines de développement.
Le script de commandes changera le répertoire pour les 4 fenêtres de la console dans le répertoire où le .cmd existe. J'ai donc créé des liens symboliques durs dans le répertoire où je veux que les 4 fenêtres de la console changent de répertoire. Les liens symboliques renvoient au canonique .4 consoles.cmd
Exécutez un lien symbolique et les 4 répertoires de travail des shells de la console seront l'emplacement où se trouve le lien symbolique sur le système de fichiers
Mon code runner de tâche gulp pour toute personne intéressée
package.json
{
"name": "MyApp",
"version": "1.0.0",
"description": "",
"main": "gulpfile.js",
"private": true,
"devDependencies": {
"del": "^1.2.0",
"gulp": "^3.9.0",
"gulp-batch": "^1.0.5",
"gulp-concat": "^2.5.2",
"gulp-imagemin": "^2.2.1",
"gulp-minify-css": "^1.1.6",
"gulp-ng-annotate": "^1.0.0",
"gulp-plumber": "^1.0.1",
"gulp-rename": "^1.2.2",
"gulp-sourcemaps": "^1.5.2",
"gulp-uglify": "^1.2.0",
"gulp-watch": "^4.2.4",
"imagemin-pngquant": "^4.1.0"
},
"author": "Author",
"license": "ISC"
}
bower.json
{
"name": "MyProject",
"version": "1",
"license": "MIT",
"private": true,
"ignore": [
"**/.*",
"node_modules",
"bower_components"
],
"dependencies": {
"bootstrap": "~3.3.4",
"jquery": "~2.1.3",
"angular": "~1.4.0",
"angular-route": "~1.4.0",
"angular-animate": "~1.4.0",
"font-awesome": "~4.3.0",
"underscore": "~1.8.3",
"bootstrap-datepicker": "~1.4.0",
"angularjs-toaster": "~0.4.12",
"angular-scroll": "~0.7.0",
"moment": "~2.10.2",
"angular-loading-bar": "~0.7.1"
}
}
gulpfile.js
'use strict';
var gulp = require('gulp');
var batch = require('gulp-batch');
var sourcemaps = require('gulp-sourcemaps');
var minifycss = require('gulp-minify-css');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var concat = require('gulp-concat');
var del = require('del');
var plumber = require('gulp-plumber');
var watch = require('gulp-watch');
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');
var ngAnnotate = require('gulp-ng-annotate');
gulp.task('default', ['clean'], function () {
gulp.start('images', 'vendorCss', 'applicationCss', 'fontIcons', 'vendorJavascript', 'applicationJavascript');
});
gulp.task('clean', function (cb) {
del(['./dist/*'], cb);
});
gulp.task('images', function () {
return gulp.src([
'./content/img/**/*'
])
.pipe(imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true,
svgoPlugins: [{ removeViewBox: false }],
use: [pngquant()]
}))
.pipe(gulp.dest('./dist/img'));
});
gulp.task('fontIcons', function () {
return gulp.src([
'./bower_components/bootstrap/dist/fonts/**.*',
'./bower_components/font-awesome/fonts/**.*'
])
.pipe(gulp.dest('./dist/fonts'));
});
gulp.task('vendorCss', function () {
return gulp.src([
'./bower_components/bootstrap/dist/css/bootstrap.css',
'./bower_components/font-awesome/css/font-awesome.css',
'./bower_components/angularjs-toaster/toaster.css',
'./bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css',
'./bower_components/angular-loading-bar/build/loading-bar.css'
])
.pipe(concat('vendor.css'))
.pipe(gulp.dest('./dist/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('./dist/css'));
});
gulp.task('vendorJavascript', function () {
return gulp.src([
'./bower_components/jquery/dist/jquery.js',
'./bower_components/angular/angular.js',
'./bower_components/angular-route/angular-route.js',
'./bower_components/angular-resource/angular-resource.js',
'./bower_components/angular-animate/angular-animate.js',
'./bower_components/angular-scroll/angular-scroll.js',
'./bower_components/angular-loading-bar/build/loading-bar.js',
'./bower_components/angularjs-toaster/toaster.js',
'./bower_components/bootstrap/dist/js/bootstrap.js',
'./bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.js',
'./bower_components/underscore/underscore.js',
'./bower_components/moment/moment.js'
])
.pipe(sourcemaps.init())
.pipe(concat('vendor.js'))
.pipe(gulp.dest('./dist/script'))
.pipe(uglify())
.pipe(rename('vendor.min.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/script'));
});
gulp.task('applicationCss', function () {
return gulp.src([
'./content/css/site.css',
'./content/css/animation.css'
])
.pipe(plumber())
.pipe(concat('app.css'))
.pipe(gulp.dest('./dist/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('./dist/css'));
});
gulp.task('applicationJavascript', function () {
return gulp.src([
'./angular/**/*.js'
])
.pipe(plumber())
.pipe(ngAnnotate())
.pipe(sourcemaps.init())
.pipe(concat('app.js'))
.pipe(gulp.dest('./dist/script'))
.pipe(uglify())
.pipe(rename('app.min.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/script'));
});
gulp.task('watchApplicationJavascript', ['applicationJavascript'], function () {
watch('./angular/**/*.js', batch(function (events, done) {
gulp.start('applicationJavascript', done);
}));
});
gulp.task('watchApplicationCss', ['applicationCss'], function () {
watch(['./content/css/site.css', './content/css/animation.css'], batch(function (events, done) {
gulp.start('applicationCss', done);
}));
});