runat - execute command in extended attribute name space
/usr/bin/runat file [command]
The runat utility is used to execute shell commands in a
file's hidden attribute directory. Effectively, this utility
changes the current working directory to be the hidden
attribute directory associated with the file argument and
then executes the specified command in the bourne shell
(/bin/sh). If no command argument is provided, an interac-
tive shell is spawned. The environment variable $SHELL
defines the shell to be spawned. If this variable is unde-
fined, the default shell, /bin/sh, is used.
The file argument can be any file, including a directory,
that can support extended attributes. It is not necessary
that this file have any attributes, or be prepared in any
way, before invoking the runat command.
The following operands are supported:
file Any file, including a directory, that can support
The command to be executed in an attribute directory.
A non-zero exit status will be returned if runat cannot
access the file argument, or the file argument does not sup-
port extended attributes.
See fsattr(5) for a detailed description of extended file
The process context created by the runat command has its
current working directory set to the hidden directory con-
taining the file's extended attributes. The parent of this
directory (the ".." entry) always refers to the file pro-
vided on the command line. As such, it may not be a direc-
tory. Therefore, commands (such as pwd) that depend upon the
parent entry being well-formed (that is, referring to a
directory) may fail.
In the absence of the command argument, runat will spawn a
new interactive shell with its current working directory set
to be the provided file's hidden attribute directory. Notice
that some shells (such as zsh and tcsh) are not well behaved
when the directory parent is not a directory, as described
above. These shells should not be used with runat.
Example 1: Using runat to list extended attributes on a file
example% runat file.1 ls -l
example% runat file.1 ls
Example 2: Creating extended attributes
example% runat file.2 cp /tmp/attrdata attr.1
example% runat file.2 cat /tmp/attrdata > attr.1
Example 3: Copying an attribute from one file to another
example% runat file.2 cat attr.1 | runat file.1 "cat > attr.1"
Example 4: Using runat to spawn an interactive shell
example% runat file.3 /bin/sh
This spawns a new shell in the attribute directory for
file.3. Notice that the shell will not be able to determine
what your current directory is. To leave the attribute
directory, either exit the spawned shell or change directory
(cd) using an absolute path.
Recommended methods for performing basic attribute opera-
runat file ls [options]
read runat file cat attribute
runat file cp absolute-file-path attribute
runat file rm attribute
runat file chmod mode attribute
runat file chgrp group attribute
runat file chown owner attribute
runat file /bin/sh
or set your $SHELL to /bin/sh and
The above list includes commands that are known to work with
runat. While many other commands may work, there is no
guarantee that any beyond this list will work. Any command
that relies on being able to determine its current working
directory is likely to fail. Examples of such commands fol-
Example 5: Using man in an attribute directory
example% runat file.1 man runat
getcwd: Not a directory
Example 6: Spawning a tcsh shell in an attribute directory
example% runat file.3 /usr/bin/tcsh
tcsh: Not a directory
tcsh: Trying to start from "/home/user"
A new tcsh shell has been spawned with the current working
directory set to the user's home directory.
Example 7: Spawning a zsh shell in an attribute directory
example% runat file.3 /usr/bin/zsh
While the command appears to have worked, zsh has actually
just changed the current working directory to '/'. This can
be seen by using /bin/pwd:
SHELL Specifies the command shell to be invoked by runat.
The following exit values are returned:
125 The attribute directory of the file referenced by the
file argument cannot be accessed.
126 The exec of the provided command argument failed.
Otherwise, the exit status returned is the exit status of
the shell invoked to execute the provided command.
See attributes(5) for descriptions of the following attri-
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
| Availability | SUNWcsu |
| CSI | Enabled |
| Interface Stability | Evolving |
open(2), attributes(5), fsattr(5)
It is not always obvious why a command fails in runat when
it is unable to determine the current working directory. The
errors resulting can be confusing and ambiguous (see the
tcsh and zsh examples above).
Man(1) output converted with