Execute standalone Dart shell scripts
Note: Fork of mezoni's dartx. Special thanks to him!
dscript can be using pub:
pub global activate dscriptMake sure, it is installed in your path:
dscript versionLookup dscript command documentation:
dscript helpCreate 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.dartThe following screen cast shows how to execute a Dart standalone shell script using dscript:
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.dartWe 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.dartmath.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 + 5Shebangs 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.dartExecute it:
./say_hello.dartPut it in system PATH and use it like any other shell script!


