Tom DCli Examples

> Attribution. The tom_d4rt project is an extended clone of the original > d4rt project by Moustapha Kodjo Amadou, initially published in 2025. The > complete interpreter is based on his idea.

Comprehensive examples demonstrating DCli shell scripting library usage.

This is the canonical DCli sample home (P2): the analyzer-free sibling tom_dcli_exec points here rather than duplicating samples, so every program below runs unchanged on both the analyzer-based (tom_d4rt_dcli) and analyzer-free (tom_dcli_exec) runtimes.

Extended multi-file samples

Full multi-file CLI applications — the command-line analog of the Flutter "extended sample" apps — with classes and functions split across files.

SampleDescription
build_suite/ Build/automation tool: BuildTask hierarchy + TaskRunner across files, shell bridges ( which , 'dart --version'.firstLine ), and a buildkit.yaml BuildKit pipeline
log_pipeline/ File-processing pipeline: parse → filter → aggregate stages over generated .log files, with a written report and coloured console summary

Single-file snippets

FileDescription
file_operations.dart copy, move, delete, touch, cat, read, head, tail, replace
directory_operations.dart createDir, deleteDir, find, exists, isDirectory, copyTree
process_execution.dart run, start, toList, firstLine, lastLine, forEach, Progress
environment.dart env, envs, HOME, PATH, isOnPATH, withEnvironment
color_output.dart red, green, blue, yellow, cyan, colored output patterns
error_handling.dart Exception handling patterns for DCli operations

Running Examples

From the dcli/dcli directory:

# Run individual examples
dart run example/tomexample/file_operations.dart
dart run example/tomexample/directory_operations.dart
dart run example/tomexample/process_execution.dart
dart run example/tomexample/environment.dart
dart run example/tomexample/color_output.dart
dart run example/tomexample/error_handling.dart

Key Patterns

File Operations

import 'package:dcli/dcli.dart';

// Create file
touch('file.txt', create: true);

// Write content
'file.txt'.write('content');
'file.txt'.append('more content');

// Read content
final lines = read('file.txt').toList();
final content = 'file.txt'.read;
cat('file.txt');

// Copy, move, delete
copy('source.txt', 'dest.txt');
move('old.txt', 'new.txt');
delete('file.txt');

Directory Operations

// Create directories
createDir('mydir');
createDir('a/b/c', recursive: true);

// Find files
find('*.dart', workingDirectory: 'lib', recursive: true)
    .forEach((f) => print(f.path));

// Delete directories
deleteDir('mydir', recursive: true);

Process Execution

// Simple execution
'echo hello'.run;

// Capture output
final lines = 'ls -la'.toList();
final first = 'cat file.txt'.firstLine;
final last = 'cat file.txt'.lastLine;

// With progress
'command'.start(progress: Progress((line) => print(line)));

// Ignore errors
'command'.start(nothrow: true, progress: Progress.devNull());

Environment

// Access variables
final home = env['HOME'];
final path = env['PATH'];

// Shortcuts
print(HOME);
print(PATH);

// Check commands
if (isOnPATH('git')) { ... }

Error Handling

try {
  read('nonexistent.txt').toList();
} on FileNotFoundException catch (e) {
  print('File not found: ${e.message}');
}

try {
  'bad_command'.run;
} on RunException catch (e) {
  print('Command failed: ${e.exitCode}');
}

See Also

  • Global DCli overview: _copilot_guidelines/d4rt/dcli_overview.md
  • Scripting guide: _copilot_guidelines/d4rt/dcli_scripting_guide.md
  • Tom tests: test/tomtest/