HSH-1.2.5: Library to mix shell scripting with Haskell programs

Portabilityportable
Stabilityprovisional
MaintainerJohn Goerzen <jgoerzen@complete.org>

HSH.ShellEquivs

Description

Copyright (c) 2006-2008 John Goerzen, jgoerzen@complete.org

This module provides shell-like commands. Most, but not all, are designed to be used directly as part of a HSH pipeline. All may be used outside HSH entirely as well.

Synopsis

Documentation

abspath :: FilePath -> IO FilePathSource

Return the absolute path of the arg. Raises an error if the computation is impossible.

appendTo :: FilePath -> String -> IO StringSource

Like catTo, but appends to the file.

basename :: FilePath -> FilePathSource

The filename part of a path

bracketCD :: FilePath -> IO a -> IO aSource

Changes the current working directory to the given path, executes the given I/O action, then changes back to the original directory, even if the I/O action raised an exception.

This is an alias for the MissingH function System.Path.bracketCWD.

catFrom :: [FilePath] -> String -> IO StringSource

Load the specified files and display them, one at a time.

The special file - means to display the input. If it is not given, no input is read.

Unlike the shell cat, - may be given twice. However, if it is, you will be forcing Haskell to buffer the input.

Note: buffering behavior here is untested.

catTo :: FilePath -> String -> IO StringSource

Takes input, writes it to the specified file, and does not pass it on. See also tee.

cd :: FilePath -> IO ()Source

An alias for System.Directory.setCurrentDirectory.

Want to change to a user's home directory? Try this:

 glob "~jgoerzen" >>= cd . head

See also bracketCD.

cut :: Integer -> Char -> String -> StringSource

Split a list by a given character and select the nth list.

 cut ' ' 2 "foo bar baz quux" -> "bar"

cutR :: [Integer] -> Char -> String -> StringSource

Split a list by a given character and select ranges of the resultant lists.

 cutR [2..4] ' ' "foo bar baz quux foobar" -> "baz quux foobar"
 cutR [1..1000] ' ' "foo bar baz quux foobar" -> "bar baz quux foobar"
 cutR [-1000..1000] ' ' "foo bar baz quux foobar" -> "foo bar baz quux foobar"

Note that too large and too small indices are essentially ignored.

dirname :: FilePath -> FilePathSource

The directory part of a path

echo :: String -> String -> StringSource

Takes a string and sends it on as standard output.

The input to this function is never read.

exit :: Int -> IO aSource

Exits with the specified error code. 0 indicates no error.

glob :: FilePath -> IO [FilePath]Source

Takes a pattern. Returns a list of names that match that pattern. Handles:

~username at beginning of file to expand to user's home dir
? matches exactly one character
* matches zero or more characters
[list] matches any character in list
[!list] matches any character not in list

The result of a tilde expansion on a nonexistant username is to do no tilde expansion.

The tilde with no username equates to the current user.

Non-tilde expansion is done by the MissingH module System.Path.Glob.

grep :: String -> [String] -> [String]Source

Search for the string in the lines. Return those that match. Same as:

 grep needle = filter (isInfixOf needle)

grepV :: String -> [String] -> [String]Source

Search for the string in the lines. Return those that do NOT match.

egrep :: String -> [String] -> [String]Source

Search for the regexp in the lines. Return those that match.

egrepV :: String -> [String] -> [String]Source

Search for the regexp in the lines. Return those that do NOT match.

joinLines :: [String] -> [String]Source

Join lines of a file

upper :: String -> StringSource

Inverse of double space; drop empty lines

Convert a string to all upper or lower case

mkdir :: FilePath -> FileMode -> IO ()Source

Creates the given directory. A value of 0o755 for mode would be typical.

An alias for System.Posix.Directory.createDirectory.

numberLines :: [String] -> [String]Source

Number each line of a file

pwd :: IO FilePathSource

An alias for System.Directory.getCurrentDirectory.

readlink :: FilePath -> IO FilePathSource

Return the destination that the given symlink points to.

An alias for System.Posix.Files.readSymbolicLink

readlinkabs :: FilePath -> IO FilePathSource

As readlink, but turns the result into an absolute path.

revW :: [String] -> [String]Source

Reverse characters on each line (rev)

unspace :: [String] -> [String]Source

Double space a file

tac :: [String] -> [String]Source

Reverse words on each line

Reverse lines in a String (like Unix tac).

Implemented as:

 tac = reverse

See uniq.

tee :: [FilePath] -> String -> IO StringSource

Takes input, writes it to all the specified files, and passes it on. This function buffers the input.

See also catFrom.

tr :: Char -> Char -> String -> StringSource

Translate a character x to y, like:

tr 'e' 'f'

Or, in sed,

y//

trd :: Char -> String -> StringSource

Delete specified character in a string.

wcW :: [String] -> [String]Source

Count number of lines. wc -l

uniq :: String -> StringSource

Remove duplicate lines from a file (like Unix uniq).

Takes a String representing a file or output and plugs it through lines and then nub to uniqify on a line basis.