environ Command

The environ command manipulates the UNIX shell environment variables from TCL.

Syntax

environ {-x} {-n} {-c string|-f {file.reference} item-ID}

Parameter(s)

-c string

Reads commands from the specified string. If the string contains more than one word, it must be enclosed in single quotation marks.

-f {file.reference} item-ID

Reads commands from the item-ID in the file reference. If the file reference is omitted, then the master dictionary is assumed.

-n

Reads commands, but does not execute them. This should be used with the -x flag to investigate the effect of an environ program for debugging purposes.

-v

Prints commands and their arguments as they are read, whether they are executed or not.

-x

Prints commands and their arguments as they are executed. The display is prefixed by a plus sign.

Description

Commands can be passed from the TCL command line or from an item. It is possible to set and test shell variables, and execute TCL commands (including UNIX commands, prefixed by an exclamation point) under control of the shell variables.

If no arguments are provided, the commands are read from the item .profile in the master dictionary of the current account.

A command is a sequence of words separated by spaces. If the command starts with an asterisk, it is treated as a comment and ignored. If the first word is not one of the key words recognized by environ, the command is treated as a TCL command, which is then executed. Commands are read from either the TCL sentence or from an item. Multiple commands can be issued on the same line by separating each command with a semicolon.

Example(s)

Causes environ to begin executing the commands in the specified item-ID. If the file reference is omitted, the master dictionary is assumed. Control does not return to the calling environ program.

chain {file.reference} item-ID

Causes environ to terminate.

exit

Reads one line from the terminal and assigns each word to the positional parameters $1, $2, and so on. Up to 32 words are moved into the positional parameters.

read

Sets (-) or resets (+) the specified environ flags. This setting overrides the flags set on the command line.

set {[+|-] flags}{arguments...}

These positional parameters $n+1, $n+2, and so on are renamed $1, $2, and so on. If n is omitted, 1 is assumed.

shift {n}

 

Command Substitution

Text enclosed in backward quotation marks is considered a TCL command. When executed, the results of the output are captured and inserted into the command replacing the command enclosed in single quotation marks. Attribute marks in the output are converted to a space. Command substitution occurs before the command is parsed.

If the command is a UNIX command, only the results of the stdout is captured. Use the UNIX redirection to send stderr to stdout, if necessary.

Parameter Substitution

The $ character is used to introduce parameters for substitution. If the parameter is a 1-digit number, it is a positional parameter in the range of 0 through 9. The shell parameter $0 is the concatenation of all positional parameters from $1 through $9, with one space inserted between each value.

Positional parameters are set by the set environ statement. The parameter name can be one reserved keyword interpreted locally by the environ command or a shell parameter.

Parameter substitution is performed before the command is parsed and before command substitution. Shell parameters (or environment variables) can be assigned values by the command:

name=value

Variables set in this manner are automatically marked for export to the environment of any subsequently executed UNIX commands.

The shell variables include:

$?

Contains the value of the return code of the last executed command. If the last command was a UNIX command, this value is the exit code. If it was a TCL command, this value is the error message number returned.

$$

Returns the UNIX ID (PID) of the current D3 process.

$!

Returns the current D3 port number.

$n

Indicates the positional parameter n to substitute (must be in the range 0 through 9).

$USER

Returns the current D3 user-ID.

$ACCT

Returns the current D3 account name.

$TIME

Returns the current D3 internal time.

$DATE

Returns the current D3 internal date.

${parameter}

Value of the shell environment variable parameter is substituted. The { } are required only if the parameter is not followed by a space.

Control Structures

if condition

then

{elif condition}

{then}

else

end

where condition is evaluated and the commands are executed according to the result.

Conditions can be expressed in one of two ways:

argument {!}operator argument2

 

!

Displays before the operator negates the condition.

operator

Either =, <, >, <= or >=.

argument1

Specifies first string, number, or parameter.

argument2

Specifies second string, number, or parameter.

or

{!}op argument1 {argument2{...}}

 

!

Displays before the operator negates the condition.

op

-f

A file—The condition is true if the specified file exists and can be opened.

-r

A file item-ID—The condition is true if the specified item-ID exists and can be read.

-v

A file item-ID value—The condition is true if the specified value exists and is not empty.

-n

A string—The condition is true if the string has a nonzero length.

argument1

Specifies the first string, number, or parameter.

argument2

Specifies the optional second string, number, or parameter.

Example(s)

Sets the D3 terminal type definition to the same value as defined in UNIX.

environ -c ’term $TERM’

Evaluates the value of the variable $USER and executes the specified environ script in the current dictionary.

environ -f ${USER}.env

 

NOTE

The braces around the variable name are used since it is not followed by a space.

Sets the UNIX terminal driver to a Wyse 50. The command env verifies the new environmental parameter.

environ -c ’TERM=wyse50’

Executes the commands contained in the master dictionary item myprofile and tests for the existence of the UNIX TERM variable. if the corresponding item exists in the dm,devices, file, it uses the TERM variable as an argument to the TCL term command. It also sets a shell variable, D3LOGON, equal to the D3 date and time, and a shell variable, D3WHO, equal to the usual TCL who command. Finally, it tests for the existence of an item .profile.username. If it exists, the item is then executed.

environ -f myprofile

 

md myprofile

001 *

002 * Set D3 Term if the shell term variable is defined.

003 if $TERM != ""

004 then

005 if -r dm,devices, $TERM; then term $TERM; end

006 else

007 display term is not defined.

008 end

009 *

010 * Set a Shell variable equal to D3 logon time, using

011 * command substitution.

012 D3LOGON=‘time‘

013 *

014 * Set a shell variable equal to port number,user-ID and MD

015 D3WHO=$! $USER $ACCT

016 *

017 * And go execute any private environment, if item exists

018 if -r md .profile.$USER; then chain .profile.$USER; end

 

NOTE

Backward quotation marks are required around time.

See Also

! Command, %getenv() Function, %malloc() Function, %putenv() Function, disc Command, env Command