Skip to content

Repository files navigation

dscript

Execute standalone Dart shell scripts

Note: Fork of mezoni's dartx. Special thanks to him!

Installation

dscript can be using pub:

pub global activate dscript

Make sure, it is installed in your path:

dscript version

Lookup dscript command documentation:

dscript help

Usage

Execute standalone Dart script

Create a Dart standalone script:

list.dart

import'dart:io';
main() async {
final dir =Directory.current;
awaitfor(FileSystemEntity entity in dir.list()) {
finalFileStat stat =await entity.stat();
if(stat.type ==FileSystemEntityType.FILE) {
print(entity.uri.pathSegments.last);
} elseif (stat.type ==FileSystemEntityType.DIRECTORY) {
print(entity.uri.pathSegments.reversed.elementAt(1));
}
}
}

Execute it:

dscript list.dart

The following screen cast shows how to execute a Dart standalone shell script using dscript:

asciicast

Embedded pubspec

dscript allows embedding pubspec in the scripts itself.

/*@pubspec.yamlname: list */import'dart:io';
main() async {
final dir =Directory.current;
awaitfor(FileSystemEntity entity in dir.list()) {
finalFileStat stat =await entity.stat();
if(stat.type ==FileSystemEntityType.FILE) {
print(entity.uri.pathSegments.last);
} elseif (stat.type ==FileSystemEntityType.DIRECTORY) {
print(entity.uri.pathSegments.reversed.elementAt(1));
}
}
}

Execute it:

dscript list.dart

Scripts with dependencies

We can leverage embedded pubspec to use external packages from pub.dartlang.org or github.

ok.dart

/*@pubspec.yamlname: okdependencies: zenity:*/import'package:zenity/zenity.dart';
main() async {
finalbool isOk =awaitZenity.showQuestionMessage(
title:'Hello!', text:'Are you feeling ok?');
if(isOk) print(':)');
elseprint(':(');
}

Execute it:

dscript ok.dart

asciicast

Multi file scripts

math.dart

/*@pubspec.yamlname: calc*/import'dart:io';
import'package:calc/calc.dart';
voidprintUsage() {
print('calc arg1 operator arg2');
print('Supported operators:');
print(' + : Addition');
print(' - : Subtraction');
print(' * : Multiplication');
print(' / : Division');
}
main(List<String> arguments) {
if(arguments.length !=3) {
printUsage();
exit(1);
}
finalint a =int.parse(arguments[0]);
finalint b =int.parse(arguments[0]);
Function op;
switch (arguments[1]) {
case'+':
op = add;
break;
case'-':
op = sub;
break;
case'*':
op = mul;
break;
case'/':
op = div;
break;
default:print('Invalid operator!\n');
printUsage();
exit(1);
}
int res =op(a, b);
print('=> $res');
}

lib/calc.dart

intadd(int a, int b) => a + b;
intsub(int a, int b) => a - b;
intmul(int a, int b) => a * b;
intdiv(int a, int b) => a ~/ b;

Execute it:

dscript math.dart 20 + 5

asciicast

Shebang

Shebangs can be used to execute a Dart script directly.

say_hello.dart

#! /usr/bin/env dscript
main() {
print('Hello!');
}

Make it executable:

chmod ug+x say_hello.dart

Execute it:

./say_hello.dart

Put it in system PATH and use it like any other shell script!

About

Execute standalone Dart shell scripts

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages