7.5. Shell Commands
|
(lsh/libc/shell.lsh) |
This set of functions is designed to facilitate the writing of "shell
scripts" in Lush. It includes functions that are more or less equivalent
to common shell commands such as ls, cd, cp, mv, rm etc. Those commands
manipulate and return lists of strings. Other functions are provided to
manipulate those lists of strings.
7.5.0. String List Utilities
|
(lsh/libc/shell.lsh) |
7.5.0.0. (glob regex l)
|
[DE] (lsh/libc/shell.lsh) |
Return a list of the elements of l
that match the regular expression regex
. l must be a list of strings, and
regex a string containing a valid Lush regular expression.
7.5.0.1. (split-words s)
|
[DE] (lsh/libc/shell.lsh) |
split a string of words (space-separated strings) into a list or those
words.
7.5.0.2. (merge-words l [c])
|
[DE] (lsh/libc/shell.lsh) |
turns a list of strings into a single string composed of the
concatenation of the elements of l
interspesed with spaces. if a string is provided in
c , it is interspesed instead of spaces.
7.5.0.3. (read-lines f)
|
[DE] (lsh/libc/shell.lsh) |
read file f and return a list of
strings, each of which is a line of the file.
7.5.0.4. (write-lines l)
|
[DE] (lsh/libc/shell.lsh) |
write each string in list l as a line.
7.5.0.5. #Pexpr
|
(lsh/libc/shell.lsh) |
equivalent to (write-lines expr )
7.5.1. File Information
|
(lsh/libc/shell.lsh) |
The functions in this section provide a simple interface to the
do-it-all function fileinfo . The all
return NIL if the file passed as argument does not exist or is
unaccessible. Some functions in this section return dates as strings.
Those date strings can be compared with the usual comparison operators.
(fileinfo filename )
7.5.1.0. (file-type f)
|
[DE] (lsh/libc/shell.lsh) |
return the type of file f as an atom
equal to 'reg for a regular file, 'dir for a directory, 'chr for
character device, etc.
7.5.1.1. (file-size f)
|
[DE] (lsh/libc/shell.lsh) |
return the size of file f in bytes
7.5.1.2. (file-mode f)
|
[DE] (lsh/libc/shell.lsh) |
return the permissions of file f as an
integer.
7.5.1.3. (file-uid f)
|
[DE] (lsh/libc/shell.lsh) |
return the userid of the owner of file f
7.5.1.4. (file-gid f)
|
[DE] (lsh/libc/shell.lsh) |
return the groupid of file f
7.5.1.5. (file-atime f)
|
[DE] (lsh/libc/shell.lsh) |
return the last access time of file f
as a string of the form "YYYY MM DD hh mm ss". The string can be turned
into a list with split-words.
7.5.1.6. (file-mtime f)
|
[DE] (lsh/libc/shell.lsh) |
return the last modification time of file f
as a string of the form "YYYY MM DD hh mm ss". The string can be turned
into a list with split-words.
7.5.1.7. (file-ctime f)
|
[DE] (lsh/libc/shell.lsh) |
return the creation time of file f as
a string of the form "YYYY MM DD hh mm ss". The string can be turned
into a list with split-words.
7.5.1.8. (file-newer? f1 f2)
|
(lsh/libc/shell.lsh) |
returns t if the modification time of file f1
is later than that of file f2 , or if
f2 does not exist. Here is how this function can be use for a
"make"-like function:
(when (file-newer? src dst) (produce-dst-from-src src dst))
7.5.2. Filename Manipulations
|
(lsh/libc/shell.lsh) |
a number of functions to manipulate file names, and paths are provided
as part of the core interpreter, including
basename, dirname, concat-fname, relative-fname, tmpname .
The present set of function adds to that set. The present functions are
not as portable as the the ones in the core interpreter, as they assume
Unix-style or URL-style path constructs (slash-separated directories)
(basename path [
suffix ]) (dirname path
) (concat-fname [ filename1
] filename2 )
7.5.2.0. (filename-get-suffixes f)
|
[DE] (lsh/libc/shell.lsh) |
returns all the suffix(es) of a file name, that is all the characters
after the last slash and after (and not including) the the last dot.
Return the empty string if no suffix is found. A trailing dot is not
considered a suffix.
? (filename-get-suffixes "dirname/basename.suffix")
= "suffix"
? (filename-get-suffixes "dirname/basename.suffix1.suffix2")
= "suffix1.suffix2"
? (filename-get-suffixes "dirname.notasuffix/basename.suffix1.suffix2")
= "suffix1.suffix2"
? (filename-get-suffixes "dirname.notasuffix/basename")
= ""
? (filename-get-suffixes "dirname.notasuffix/basename.")
= ""
7.5.2.1. (filename-chop-suffixes f)
|
[DE] (lsh/libc/shell.lsh) |
remove all the suffix(es) from a file name, that is all the characters
after the last slash and starting at the first dot. A trailing dot is
not considered a suffix.
? (filename-chop-suffixes "dirname/basename.suffix")
= "dirname/basename"
? (filename-chop-suffixes "dirname/basename.suffix1.suffix2")
= "dirname/basename"
? (filename-chop-suffixes "dirname.notasuffix/basename.suffix1.suffix2")
= "dirname.notasuffix/basename"
? (filename-chop-suffixes "dirname.notasuffix/basename")
= "dirname.notasuffix/basename"
? (filename-chop-suffixes "dirname.notasuffix/basename.")
= "dirname.notasuffix/basename."
7.5.2.2. (filename-get-suffix f)
|
[DE] (lsh/libc/shell.lsh) |
returns the last suffix of a file name, that is all the characters after
the last slash and after (and not including) the last dot. Return the
empty string if no suffix is found. A trailing dot is not considered a
suffix.
? (filename-get-suffix "dirname/basename.suffix")
= "suffix"
? (filename-get-suffix "dirname/basename.suffix1.suffix2")
= "suffix2"
? (filename-get-suffix "dirname.notasuffix/basename.suffix1.suffix2")
= "suffix2"
? (filename-get-suffix "dirname.notasuffix/basename")
= ""
? (filename-get-suffix "dirname.notasuffix/basename.")
= ""
7.5.2.3. (filename-chop-suffix f)
|
[DE] (lsh/libc/shell.lsh) |
remove the last suffix from a file name, that is all the characters
after (and including) the last dot. A trailing dot is not considered a
suffix.
? (filename-chop-suffix "dirname/basename.suffix")
= "dirname/basename"
? (filename-chop-suffix "dirname/basename.suffix1.suffix2")
= "dirname/basename.suffix1"
? (filename-chop-suffix "dirname.notasuffix/basename.suffix1.suffix2")
= "dirname.notasuffix/basename.suffix1"
? (filename-chop-suffix "dirname.notasuffix/basename")
= "dirname.notasuffix/basename"
? (filename-chop-suffix "dirname.notasuffix/basename.")
= "dirname.notasuffix/basename."
7.5.3. Variables
|
(lsh/libc/shell.lsh) |
7.5.3.0. shell-home
|
(lsh/libc/shell.lsh) |
user home directory
7.5.3.1. shell-dirstack
|
(lsh/libc/shell.lsh) |
directory stack manipulated by pushd and popd
7.5.3.2. shell-tmpdir
|
(lsh/libc/shell.lsh) |
directory used by the function sh to store temporary files.
7.5.4. Directories
|
(lsh/libc/shell.lsh) |
7.5.4.0. (pwd)
|
[DE] (lsh/libc/shell.lsh) |
return current directory (equivalent to (chdir)).
7.5.4.1. (cd [d])
|
[DE] (lsh/libc/shell.lsh) |
change current directory to d , or to
user home if p is not present.
7.5.4.2. (pushd d)
|
[DE] (lsh/libc/shell.lsh) |
Temporarily change current directory to d
. Returning to the previous directory can be done with popd.
7.5.4.3. (popd)
|
[DE] (lsh/libc/shell.lsh) |
return to the current directory before the last pushd.
7.5.5. Shell Commands
|
(lsh/libc/shell.lsh) |
This set of functions is designed to facilitate the writing of "shell
scripts" in Lush. It includes functions that are more or less equivalent
to common shell commands such as ls, cd, cp, mv, rm etc. Those commands
manipulate and return lists of strings. Other functions are provided to
manipulate those lists of strings.
7.5.5.0. (rm f)
|
[DE] (lsh/libc/shell.lsh) |
remove file f (be careful).
7.5.5.1. (cp from to)
|
[DE] (lsh/libc/shell.lsh) |
copy file from into file
to
7.5.5.2. (mv from to)
|
[DE] (lsh/libc/shell.lsh) |
move file from from to
to .
7.5.5.3. (ls d1 d2 ... dn)
|
[DE] (lsh/libc/shell.lsh) |
return a list of all the files in d1
(in case-insensitive lexicographic order), followed by all the files in
d2 , etc... Invisible files (".", "..", ".xxx", etc) are not
included.
7.5.5.4. (ls-a d1 d2 ... dn)
|
[DE] (lsh/libc/shell.lsh) |
return a list of all the files in d1
(in case-insensitive lexicographic order), followed by all the files in
d2 , etc... Invisible files (".", "..", ".xxx", etc) are
included.
7.5.5.5. (sh cmd [l])
|
[DE] (lsh/libc/shell.lsh) |
run shell command cmd and return the
standard output as a list of strings (one string per line). The optional
argument l is a list of strings that
will be written to a temporary file (one line per string) and fed to the
standard input of command cmd
7.5.5.6. (sh-find dir pattern)
|
[DE] (lsh/libc/shell.lsh) |
calls the standard unix command find to find all the files whose name
fit the pattern pattern (this is a
unix-style shell regex, not a Lush regex). Example:
(sh-find "." "*.lsh")