Environment variables


 
Thread Tools Search this Thread
# 1  
Environment variables

why are all environment variables represented in a fixed format regardless of the shell you use?
like $HOME $PATH etc
# 2  
Well, in UNIX and shell, variable case is relevant, $HOME is not $home or $Home or $hOME, and some are very old choices, old like COBOL 68, before computers could afford lower case, so upper case is traditional for all env variables used by O/S or compiled code and other shared applications.

In your own private shell scripts, feel free to use lower case for your own data, without fear that you are accidentally turning on the $GO_AWAY_FOREVER option.

I can still hear those mainframers at AT&T, when I suggested encoding a flag byte with lower case for additional situations, mnemonicly, growling "You UNIX guys and your lower case!" Smilie
This User Gave Thanks to DGPickett For This Post:
# 3  
That, and shells are (mostly) supposed to be compatible with each other to a limited extent. bourne shell, korn shell, whatever odd old shell solaris uses, csh, and even windows CMD all have a PATH.

It can hardly be changed now in any case... It's so deep into tradition it's even made it into library calls. The execvp() and execlp library calls act in a shell-like manner, checking PATH for where to look for executables.

Last edited by Corona688; 10-19-2010 at 02:57 PM..
# 4  
I seem to recall csh was semi-case-insensitive, another reason to stay away.

'PATH' is hard coded into exec(), the library path variable whatever it is on the brand in the synamic linker, MANPATH into man, and '$PWD' changes no matter how you change the working directory, so the environment has many frozen variables. I checked my local CScope web utility. Lots of include files mention PATH, but none has "PATH" -- maybe in the kernel C?

Code:
                                                                             /usr/include/limits.h  <unknown>     71  #  define _POSIX_PATH_MAX	255 	/* The number of bytes in a pathname */
                                                                             /usr/include/limits.h  <unknown>    284  #    define PATH_MAX   	1023	/* max number of characters in a pathname (not
                                                                          /usr/include/sys/param.h  <unknown>    388  * MAXPATHLEN defines the longest permissable path length
                                                                          /usr/include/sys/param.h  <unknown>    398  #define MAXPATHLEN	1024
                                                                 /usr/include/.unsupp/sys/_errno.h  <unknown>     22  #  define EPATHREMOTE		133	/* Pathname is remote */
                                                                         /usr/include/sys/unistd.h  <unknown>    712  #  define _PC_PATH_MAX		4  /* PATH_MAX: Max # of bytes in a pathname */
                                                                         /usr/include/sys/unistd.h  <unknown>    800  #  define _CS_PATH	200	/* Search path that finds all POSIX.2 utils */
                                                                         /usr/include/sys/unistd.h  <unknown>    873  #  define GF_PATH	"/etc/group"	/* Path name of the "group" file */
                                                                         /usr/include/sys/unistd.h  <unknown>    874  #  define PF_PATH	"/etc/passwd"	/* Path name of the "passwd" file */
                                                                         /usr/include/sys/unistd.h  <unknown>    875  #  define IN_PATH	"/usr/include"	/* Path name for <...> files */
                                                                         /usr/include/sys/unistd.h  <unknown>    880  #  define CS_PATH	  \
                                                                         /usr/include/sys/ptrace.h  <unknown>     79  #define	PT_GET_PROCESS_PATHNAME	23 /* Get Pathname for exec'd file */
                                                                         /usr/include/sys/ptrace.h  <unknown>     81  #define IS_PTRACE_REQ(i)   ((i) >= PT_SETTRC && (i) <= PT_GET_PROCESS_PATHNAME)
                                                                   /usr/include/sys/scall_define.h  <unknown>    323  #define	SYS_PATHCONF	230
                                                                   /usr/include/sys/scall_define.h  <unknown>    325  #define	SYS_FPATHCONF	231
                                                                   /usr/include/sys/scall_define.h  <unknown>    751  #define	SYS_SENDPATH	480
                                                                   /usr/include/sys/scall_define.h  <unknown>    755  #define	SYS_SENDPATH64	482
                                                                   /usr/include/sys/scall_define.h  <unknown>    761  #define	SYS_MODPATH	485
                                                                      /usr/include/sys/semglobal.h  <unknown>    231  * DLM_MPATH_LOCK_ORDER		mod_mpath_lock: rw-sleep
                                                                      /usr/include/sys/semglobal.h  <unknown>    241  #define DLM_MPATH_LOCK_ORDER	DLM_TOP_LOCK_ORDER - 20

# 5  
Quote:
why are all environment variables represented in a fixed format regardless of the shell you use?
like $HOME $PATH etc
This is not strictly true.
Those environment variables are set by the program "login". See "man login". The program "login" executes before Shell starts. However not every Shell starts from "login".
It is quite possible to start a Shell without anything setting $HOME $PATH etc..
There are also differences in "csh".
# 6  
Quote:
Originally Posted by methyl
This is not strictly true.
Those environment variables are set by the program "login". See "man login". The program "login" executes before Shell starts. However not every Shell starts from "login".
It is quite possible to start a Shell without anything setting $HOME $PATH etc..
There are also differences in "csh".
The when you run in other milieu, such as "rsh/ssh/ssh2 host command", the environment may be even less. That is where 'set' is so nice: try it and see. Your cron may vary.

Especially if you write commands for set-uid or set-groupid, the environment is removed and shell scripts generally need not apply, just C and the like compiled with -R for trustworthy, hard-wired library search path to foil hackers.
# 7  
@DGPickett
I don't recall any issues with typing or printing or punching lower case Algol 68 programs on a teletype.
This was not a constraint in the standardisation of high-level languages such as Cobol. It was just not on the agenda of the 1968 committee.
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Science: Computers
Difficulty: Medium
Linus Sebastian is the creator of the Linux kernel, which went on to be used in Linux, Android, and Chrome OS.
True or False?

10 More Discussions You Might Find Interesting

1. HP-UX

Environment Variables

Hi All, I need to understand following three environment variables and their usages in HP Unix. _M_ARENA_OPTS _M_CACHE_OPTS PTHREAD_SCOPE_SYSTEM How does these environment variables influence multi threaded applciation and how do we decide the value of these variables? Is there... (0 Replies)
Discussion started by: angshuman
0 Replies

2. Homework & Coursework Questions

Environment Variables

1. The problem statement: What is the mesg value set for your environment? If it is on, how would you turn off your current session? How would you set it permanently? 3. The attempts at a solution : Read Unix The textbook. 3rd chapter has many things like environment variables and... (5 Replies)
Discussion started by: mahinkhan22
5 Replies

3. Shell Programming and Scripting

Environment variables

I have read tons of posts about how you can't set persisting environment variable in a child script of a shell and have it persist. The only way is to source a file as % . <scriptname> I am finding that true... but I know there is a way around it. I just don't know how. I worked for 6... (5 Replies)
Discussion started by: rwa25
5 Replies

4. Shell Programming and Scripting

using environment variables

say i define an environment variable in a particular script (upgrade.sh). my script is upgarde.sh and it calls another script try.sh. will this environment variable be accessible to try.sh also. if not how to I make environment variables global so that they can be used by any script. (2 Replies)
Discussion started by: lassimanji
2 Replies

5. Shell Programming and Scripting

environment variables

Hi, If i have a variable set and exported in my pofile file will that variable be available in all shell scripts created. Thanks, Radhika. (3 Replies)
Discussion started by: radhika03
3 Replies

6. Programming

environment variables

hi, I want to create a new EV(Environment Variable) through a c program and I done this thing through setenv() method. But the newly created EV is not permanent, i.e. when I exit from the program the EV also no longer lives. But I want to make it a permanent EV for the current user. Actually I... (6 Replies)
Discussion started by: sumsin
6 Replies

7. UNIX for Dummies Questions & Answers

help..Environment variables...

hi, 1). i would like to know what is meant by environment variables? 2). is the number of envi variables is a constant number for unix systems? 3). how to see the list of envi variables (and the values of the envi variables)in a single command? 4). if this questions were already asked... (3 Replies)
Discussion started by: sekar sundaram
3 Replies

8. UNIX for Dummies Questions & Answers

environment variables

Hi Folks, Is it possible somehow to unset all the environment variables which have been defined before in UNIX (Solaris). Thanks, Slava (3 Replies)
Discussion started by: spavlov
3 Replies

9. Programming

environment variables

Hi! How-to get the environment variables in GNU. getenv() only fetches the ones that you can find under export (not the ones under declare)... best regars .David (2 Replies)
Discussion started by: Esaia
2 Replies

10. UNIX for Dummies Questions & Answers

what is the use of Environment variables

what is the actual use of environment variables. I know only PS1, LOGNAME, PS2 variables what are the other variables & what is there use (2 Replies)
Discussion started by: indianguru
2 Replies

Featured Tech Videos