Linux - GeneralThis Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then this is the place.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
in fact what I want is to modify somewhat enviorenment variables so that they could work as expeted when starting my machine. my book just said linux could initialized all variables depend on the data of .profile but I couldnt find it. I searched .bashrc and .bash_profile but didnt helps. it seems both of them ommit those nicely variables. so I wonder which file is the original data source when startup ?
Black, before you do anything, I'd really appreciate it if you go to the user cp options at the top of the page and put 'redhat 7.1' instead of 'GNU' next to distribution. GNU make their own OS which is not Linux. GNU software runs on systems using the Linux kernel however. You can write 'Redhat GNU/Linux 7.1' if you want to.
What variables do you want to set? Most people set them in the .bash_profile
IIRC, the .profile thing used to be used when bash was not the default shell. I think, although I am not sure, that if you put stuff in the .profile, all shells can use it, whereas if you put it in .bash_profile, only bash can use it.
Thought I would shed some light on the initialization files process:
When a user logs in the first systemwide file /etc/profile is sourced, next would be the .bash_profile in the users home directory. If there is no .bash_profile it then the next file would be .bashrc.
Now if none of those files above exist the next file in line is .bash_login and after that if it doesn't exist would be .profile.
Now it is possible to have a system wide defaults called /etc/bashrc as well like the /etc/profile.
The order again:
if-----> /etc/profile exists, source it,
if------->~/.bash_profile exists, source it
if-------->~/.bashrc exists, source it
else if -----> ~/.bash_login exists, source it
else if -----> ~/.profile exists, source it
Distribution: Red Hat 8.0, Slackware 8.1, Knoppix 3.7, Lunar 1.3, Sorcerer
Posts: 771
Rep:
.profile is a ksh (Korn Shell which is a derivative of the original Bourne Shell aka sh) profile file. If your UNIX system has ksh installed in it, chances are that you'll have a .profile in your $HOME. The systemwide profile is /etc/profile . It is still used even in Linux systems where bash ( Bourne Again SHell - the improvised GNU ksh ) is the default shell. There are significant differences between interactive and non-interactive invocations of bash, that I thought I should bring up.
Here's the relevant section of the bash man page.
A login shell is one whose first character of argument zero is a -, or one started with the --login option.
An interactive shell is one started without non-option arguments and without the -c option whose standard input and output are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
The following paragraphs describe how bash executes its startup files. If any of the files exist but cannot be read, bash reports an error. Tildes are expanded in file names as described below under Tilde Expansion in the EXPANSION section.
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file name.
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The --noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read.
When bash is started in posix mode, as with the --posix command line option, it follows the POSIX standard for startup files. In this mode, interactive shells expand the ENV variable and commands are read and executed from the file whose name is the expanded value. No other startup files are read.
Bash attempts to determine when it is being run by the remote shell daemon, usually rshd. If bash determines it is being run by rshd, it reads and executes commands from ~/.bashrc, if that file exists and is readable. It will not do this if invoked as sh. The --norc option may be used to inhibit this behavior, and the --rcfile option may be used to force another file to be read, but rshd does not generally invoke the shell with those options or allow them to be specified.
Originally posted by Thymox More importantly, how old is the book? I've read about the .profile thing before, however, it was related to old Unices and early Linux systems.
in fact that book is for UNIX and I couldnt find a book like it for linux so...
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.