plash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Plash] Plash 1.6 released


From: Mark Seaborn
Subject: [Plash] Plash 1.6 released
Date: Tue, 18 Jan 2005 19:28:20 +0000 (GMT)

Version 1.6 of Plash is now available for download:
http://www.cs.jhu.edu/~seaborn/plash/plash.html

The shell now lets you start processes with existing files and
directories attached to arbitrary points in the filesystem tree.  For
example:

  gcc -c /arg/foo.c=(F bar.c) => -o out.o

The directory `/arg' does not need to exist in the real filesystem.
It will be created in the fabricated filesystem that `gcc' receives.

The general form of this new kind of argument is "PATHNAME = EXPR",
where the pathname may be relative to the root directory or the
current directory.  At present, the only kind of expression is
"F PATHNAME", which returns the file or directory object at that
pathname (following symlinks if necessary).

The command also receives the pathname being assigned to ("/arg/foo.c"
in the example) as an argv argument, unless the argument occurs to the
right of a "+" operator.  For example, you can give a process a
different /tmp directory using:

  blah + /tmp=(F ~/new-tmp)

The difference between writing

  blah a/b/c
and
  blah a/b/c=(F a/b/c)

is that if any of the components of the path `a/b/c' are symbolic
links, in the first case the constructed filesystem will include those
symbolic links and the objects they point to, whereas in the second
case, `a', `a/b' and `a/b/c' will appear as directories and files.

The `=' argument syntax does not force the object being attached to be
read-only, even if the argument appears to the left of `=>'.  A
future extension will be to let you write "(read_only(F file))" as an
expression.

This only lets you attach existing files.  A future extension will be
to let you write "path $= (S file)", where the "S" expression returns
a slot object, and "$=" attaches a slot to the filesystem.  (Slots
represent a location in which a file, directory or symlink may be
created or deleted.)

One caveat is that if you do
  blah + /a/b=EXPR1 /a=EXPR2
the binding for `/a/b' does not appear; it is overridden by `/a'.
The directories `/bin', `/usr', `/etc' and `/lib' are implicitly
attached to the filesystem that is constructed, so this means you
can't yet attach new objects within these directories.

Mark




reply via email to

[Prev in Thread] Current Thread [Next in Thread]