Herramienta escrita en Haskell para probar programas de línea de comandos de forma declarativa. Lee archivos de prueba donde se define un comando a ejecutar, entrada estándar opcional, y la salida estándar, salida de error y código de salida esperados. Luego ejecuta las pruebas, compara los resultados reales con los esperados y genera un informe. Ejemplo de su uso:
$ nano ejemplos.test
# echo imprime su argumento en stdout, nada en stderr, y sale con 0
$ echo a
a
# cat con una opción inválida: nada en stdout, error en stderr, salida != 0
$ ls /home/$USER >/dev/null
$ echo $?
0
# Probar una API REST con curl y jq
$ curl -s https://jsonplaceholder.typicode.com/todos | jq '. | length'
>
200
>= //
# verificar que `find` encuentra algo bajo `/etc/X11/`
$ sudo find /etc -name xorg.conf.d
> /\/X11\//
>= //
$ shelltest -c ejemplos.test
$ shelltest --hide-successes ejemplos.test
$ shelltest ejemplos.test -c -j8 -o1 --hide-successes