Scriptlike: New lib to aid in writing script-like programs

Jesse Phillips Jesse.K.Phillips+D at gmail.com
Tue Feb 11 10:52:01 PST 2014


On Tuesday, 11 February 2014 at 11:38:06 UTC, Nick Sabalausky 
wrote:
> I've released a little one-module utility, Scriptlike, to help 
> simplify writing shell script-like programs in D:
>
>   https://github.com/Abscissa/scriptlike

It looks like you've covered a lot of the short comings for doing 
some cmdln scripting. It also sounds like it would fit right into 
what I was doing (I hand only covered the user input portion) 
https://github.com/JesseKPhillips/JPDLibs/tree/cmdln (I really 
probably should move it into its own project, maybe I should 
instead submit mine to yours? Though I use Boost License).

[OT] I also want to thank those behind std.process, std.path, and 
std.algorithms these things have been really awesome and I use 
heavily (great improvements).

> Current Features:
>
> - A thin wrapper over std.path and std.file that provides a 
> dedicated Path type specifically designed for managing file 
> paths in a simple, reliable, cross-platform way. No more 
> dealing with slashes, paths-with-spaces, calling buildPath, 
> normalizing, or getting paths mixed up with ordinary strings.

Personally I've found the new std.path makes this much easier, 
I'm not user how you can address paths-with-spaces as this 
depends on who you call, internally I don't need to worry. But 
maybe this simplifies it more and is still worth it.

> - Optionally enable automatic command echoing (including shell 
> commands, changing/creating directories and 
> deleting/copying/moving/linking/renaming both directories and 
> files) by setting one simple flag: bool scriptlikeTraceCommands

Command echoing, and dry run are both valuable.

> - Most typical Phobos modules automatically imported. Who needs 
> rows and rows of standard lib imports for a mere script?
>
> - Less-pedantic filesystem operations for when you don't care 
> whether it exists or not: existsAsFile, existsAsDir, 
> existsAsSymlink, tryRename, trySymlink, tryCopy, tryMkdir, 
> tryMkdirRecurse, tryRmdir, tryRmdirRecurse, tryRemove: All 
> check whether the source path exists and return WITHOUT 
> throwing if there's nothing to do.

This is my biggest gripe with the current available functions!

> - One simple call, runShell, to run a shell command 
> script-style (ie, synchronously with forwarded stdout/in/err) 
> from any working directory. (Also automatically works around 
> DMD #10863 without waiting for v2.066 - BTW, thanks all 
> involved who fixed that.)

Aside from the bug, I don't understand what this provides over 
"execute."

> - One simple function, fail(string msg), to help you exit with 
> an error message in an exception-safe way. (Does require some 
> minor boilerplate added to your main().)

I've just been using exceptions, Fail should take a return code 
too.


More information about the Digitalmars-d-announce mailing list