bashrc or bash_profile?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







49















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...)










share|improve this question




















  • 3





    See also the same question at Super User.

    – Gilles
    Sep 6 '10 at 19:41


















49















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...)










share|improve this question




















  • 3





    See also the same question at Super User.

    – Gilles
    Sep 6 '10 at 19:41














49












49








49


13






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...)










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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














  • 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










2 Answers
2






active

oldest

votes


















24














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





share|improve this answer





















  • 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



















8














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.






share|improve this answer


























  • 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












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
});


}
});














draft saved

draft discarded


















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









24














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





share|improve this answer





















  • 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
















24














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





share|improve this answer





















  • 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














24












24








24







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





share|improve this answer















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






share|improve this answer














share|improve this answer



share|improve this answer








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














  • 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













8














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.






share|improve this answer


























  • 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
















8














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.






share|improve this answer


























  • 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














8












8








8







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.






share|improve this answer















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.







share|improve this answer














share|improve this answer



share|improve this answer








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



















  • 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


















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

GameSpot

connect to host localhost port 22: Connection refused

Getting a Wifi WPA2 wifi connection