Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
grunt-exec
Advanced tools
Grunt plugin for executing shell commands.
Install grunt-exec using npm:
$ npm install grunt-exec --save-dev
Then add this line to your project's Gruntfile.js:
grunt.loadNpmTasks('grunt-exec');
This plugin is a multi task, meaning that grunt will automatically iterate over all exec targets if a target is not specified.
If the exit code generated by the specified shell command is greater than 0, grunt-exec will assume an error has occurred and will abort grunt immediately.
true
, stdin will be redirected from the child process to the current process allowing user interactivity (EXPERIMENTAL)true
, stdout will be printed. Defaults to true
.true
, stderr will be printed. Defaults to true
.0
. Can be an array
for multiple allowed exit codes.child_process.exec
. Defaults to
a noop.child_process.spawnSync
. Defaults to false.child_process.exec
. NodeJS Documentation
cwd
String Current working directory of the child processenv
Object Environment key-value pairsencoding
String (Default: 'utf8')shell
String Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.)timeout
Number (Default: 0)maxBuffer
Number largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed (Default: 200*1024)killSignal
String (Default: 'SIGTERM')uid
Number Sets the user identity of the process. (See setuid(2).)gid
Number Sets the group identity of the process. (See setgid(2).)If the configuration is instead a simple string
, it will be
interpreted as a full command itself:
exec: {
echo_something: 'echo "This is something"'
}
If you plan on doing advanced stuff with grunt-exec, you'll most likely be using
functions for the command
property of your exec targets. This section details
a couple of helpful tips about command functions that could help make your life
easier.
Command functions can be called with arbitrary arguments. Let's say we have the following exec target that echoes a formatted name:
exec: {
echo_name: {
cmd: function(firstName, lastName) {
var formattedName = [
lastName.toUpperCase(),
firstName.toUpperCase()
].join(', ');
return 'echo ' + formattedName;
}
}
}
In order to get SIMPSON, HOMER
echoed, you'd run
grunt exec:echo_name:homer:simpson
from the command line.
grunt
objectAll command functions are called in the context of the grunt
object that they
are being ran with. This means you can access the grunt
object through this
.
The following examples are available in grunt-exec's Gruntfile.
grunt.initConfig({
exec: {
remove_logs: {
command: 'rm -f *.log',
stdout: false,
stderr: false
},
list_files: {
cmd: 'ls -l **'
},
list_all_files: 'ls -la',
echo_grunt_version: {
cmd: function() { return 'echo ' + this.version; }
},
echo_name: {
cmd: function(firstName, lastName) {
var formattedName = [
lastName.toUpperCase(),
firstName.toUpperCase()
].join(', ');
return 'echo ' + formattedName;
}
}
}
});
$ cd grunt-exec
$ npm test
Found a bug? Create an issue on GitHub.
https://github.com/jharding/grunt-exec/issues
For transparency and insight into the release cycle, releases will be numbered with the follow format:
<major>.<minor>.<patch>
And constructed with the following guidelines:
For more information on semantic versioning, please visit http://semver.org/.
Original Copyright (c) 2012-2014 Jake Harding Copyright (c) 2016 grunt-exec Licensed under the MIT License.
FAQs
Grunt task for executing shell commands.
We found that grunt-exec demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.