bashrc or bash_profile?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I know the difference between the two bash login scripts:
.bashrc
is run only by "non-login" shells.
.bash_profile
(or .bash_login
or .profile
) is executed by "login" shells.
Does anyone have some good examples of what things that are a better fit for login-only execution, such that I'd only put them in .bash_profile
, but they wouldn't really make sense in .bashrc
?
(I know most of us source .bashrc
out of .bash_profile
, so there doesn't seem to be much point in the opposite question...)
scripts startup bash
add a comment |
I know the difference between the two bash login scripts:
.bashrc
is run only by "non-login" shells.
.bash_profile
(or .bash_login
or .profile
) is executed by "login" shells.
Does anyone have some good examples of what things that are a better fit for login-only execution, such that I'd only put them in .bash_profile
, but they wouldn't really make sense in .bashrc
?
(I know most of us source .bashrc
out of .bash_profile
, so there doesn't seem to be much point in the opposite question...)
scripts startup bash
3
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41
add a comment |
I know the difference between the two bash login scripts:
.bashrc
is run only by "non-login" shells.
.bash_profile
(or .bash_login
or .profile
) is executed by "login" shells.
Does anyone have some good examples of what things that are a better fit for login-only execution, such that I'd only put them in .bash_profile
, but they wouldn't really make sense in .bashrc
?
(I know most of us source .bashrc
out of .bash_profile
, so there doesn't seem to be much point in the opposite question...)
scripts startup bash
I know the difference between the two bash login scripts:
.bashrc
is run only by "non-login" shells.
.bash_profile
(or .bash_login
or .profile
) is executed by "login" shells.
Does anyone have some good examples of what things that are a better fit for login-only execution, such that I'd only put them in .bash_profile
, but they wouldn't really make sense in .bashrc
?
(I know most of us source .bashrc
out of .bash_profile
, so there doesn't seem to be much point in the opposite question...)
scripts startup bash
scripts startup bash
edited 9 hours ago
Kevin Bowen
14.9k155971
14.9k155971
asked Aug 7 '10 at 2:14
Don FaulknerDon Faulkner
6451613
6451613
3
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41
add a comment |
3
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41
3
3
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41
add a comment |
2 Answers
2
active
oldest
votes
Since a .bashrc
is for non-login shells, I avoid any commands which echo to the screen. I've also run into experiences where echo statements in .bashrc
will cause sftp and rsync commands to fail (and maybe scp commands as well).
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
Also, you generally won't run ssh-agent from a non-interactive shell. So I have this in .bash_profile
.
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default.bashrc
files in Ubuntu, copied from/etc/skel/.bashrc
upon account creation, as well as the systemwide/etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).
– Eliah Kagan
Nov 19 '17 at 14:09
add a comment |
Byobu is a great example of something you should never ever put in a .bashrc
.
Otherwise, it will recursively run itself in every single one of its 'virtual terminals' ;-)
You can try it though, it's sort of fun.
That why you put it in .profile
, so byobu (which really is a just wrapper around screen) is only loaded, once, at login-time. And byobu itself can start new interactive bash sessions.
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1528%2fbashrc-or-bash-profile%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Since a .bashrc
is for non-login shells, I avoid any commands which echo to the screen. I've also run into experiences where echo statements in .bashrc
will cause sftp and rsync commands to fail (and maybe scp commands as well).
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
Also, you generally won't run ssh-agent from a non-interactive shell. So I have this in .bash_profile
.
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default.bashrc
files in Ubuntu, copied from/etc/skel/.bashrc
upon account creation, as well as the systemwide/etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).
– Eliah Kagan
Nov 19 '17 at 14:09
add a comment |
Since a .bashrc
is for non-login shells, I avoid any commands which echo to the screen. I've also run into experiences where echo statements in .bashrc
will cause sftp and rsync commands to fail (and maybe scp commands as well).
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
Also, you generally won't run ssh-agent from a non-interactive shell. So I have this in .bash_profile
.
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default.bashrc
files in Ubuntu, copied from/etc/skel/.bashrc
upon account creation, as well as the systemwide/etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).
– Eliah Kagan
Nov 19 '17 at 14:09
add a comment |
Since a .bashrc
is for non-login shells, I avoid any commands which echo to the screen. I've also run into experiences where echo statements in .bashrc
will cause sftp and rsync commands to fail (and maybe scp commands as well).
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
Also, you generally won't run ssh-agent from a non-interactive shell. So I have this in .bash_profile
.
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
Since a .bashrc
is for non-login shells, I avoid any commands which echo to the screen. I've also run into experiences where echo statements in .bashrc
will cause sftp and rsync commands to fail (and maybe scp commands as well).
# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime
Also, you generally won't run ssh-agent from a non-interactive shell. So I have this in .bash_profile
.
if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi
edited 9 hours ago
Kevin Bowen
14.9k155971
14.9k155971
answered Aug 7 '10 at 4:20
Stefan LasiewskiStefan Lasiewski
2,48252032
2,48252032
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default.bashrc
files in Ubuntu, copied from/etc/skel/.bashrc
upon account creation, as well as the systemwide/etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).
– Eliah Kagan
Nov 19 '17 at 14:09
add a comment |
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default.bashrc
files in Ubuntu, copied from/etc/skel/.bashrc
upon account creation, as well as the systemwide/etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).
– Eliah Kagan
Nov 19 '17 at 14:09
2
2
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
If you use ~/.profile instead of ~/.bash_profile things will still work even if you change shells.. ~/.bash_profile is for bash specific things.
– LassePoulsen
Aug 7 '10 at 8:55
1
1
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
But bash will only run EITHER .bash_profile OR .profile, so if you're going to use both, you need to source .profile from within .bash_profile or something. That isn't a bad idea, actually...
– Don Faulkner
Aug 9 '10 at 14:43
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
@Source & @Don : Good points. I used to have Bashisms in my .bash_profile, but now I've switched to something more universal. Maybe using .profile is in order.
– Stefan Lasiewski
Aug 9 '10 at 23:26
Regarding output-producing commands in
.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default .bashrc
files in Ubuntu, copied from /etc/skel/.bashrc
upon account creation, as well as the systemwide /etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).– Eliah Kagan
Nov 19 '17 at 14:09
Regarding output-producing commands in
.bashrc
interfering with remote file transfer methods implemented via standard streams, the solution is to put such commands under code that checks if the shell is interactive and continues only if it is. Users' default .bashrc
files in Ubuntu, copied from /etc/skel/.bashrc
upon account creation, as well as the systemwide /etc/bash.bashrc
, already contain code that checks and returns if the shell is noninteractive (though one must still put one's output-producing commands under them).– Eliah Kagan
Nov 19 '17 at 14:09
add a comment |
Byobu is a great example of something you should never ever put in a .bashrc
.
Otherwise, it will recursively run itself in every single one of its 'virtual terminals' ;-)
You can try it though, it's sort of fun.
That why you put it in .profile
, so byobu (which really is a just wrapper around screen) is only loaded, once, at login-time. And byobu itself can start new interactive bash sessions.
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
add a comment |
Byobu is a great example of something you should never ever put in a .bashrc
.
Otherwise, it will recursively run itself in every single one of its 'virtual terminals' ;-)
You can try it though, it's sort of fun.
That why you put it in .profile
, so byobu (which really is a just wrapper around screen) is only loaded, once, at login-time. And byobu itself can start new interactive bash sessions.
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
add a comment |
Byobu is a great example of something you should never ever put in a .bashrc
.
Otherwise, it will recursively run itself in every single one of its 'virtual terminals' ;-)
You can try it though, it's sort of fun.
That why you put it in .profile
, so byobu (which really is a just wrapper around screen) is only loaded, once, at login-time. And byobu itself can start new interactive bash sessions.
Byobu is a great example of something you should never ever put in a .bashrc
.
Otherwise, it will recursively run itself in every single one of its 'virtual terminals' ;-)
You can try it though, it's sort of fun.
That why you put it in .profile
, so byobu (which really is a just wrapper around screen) is only loaded, once, at login-time. And byobu itself can start new interactive bash sessions.
edited 9 hours ago
Kevin Bowen
14.9k155971
14.9k155971
answered Sep 6 '10 at 18:31
RalfRalf
1,650118
1,650118
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
add a comment |
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
That's a good example. Thanks for the pointer to Byobu as well. Now to go try it out.
– Don Faulkner
Sep 7 '10 at 13:12
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1528%2fbashrc-or-bash-profile%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
See also the same question at Super User.
– Gilles
Sep 6 '10 at 19:41