Skip to content

Commit 91c0218

Browse files
committed
add more general bashrc advice
1 parent b66dbe9 commit 91c0218

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

docs/guides/terminal.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,51 @@ export PATH=$xdgbase/bin:$PATH
7676
!!! note "XDG what?"
7777
The [XDG base directory specification](https://specifications.freedesktop.org/basedir-spec/latest/) is used by most applications to determine where to look for configurations, and where to store data and temporary files.
7878

79+
[](){#ref-guides-terminal-bashrc}
80+
## Modifying bashrc
81+
82+
The `~/.bashrc` in your home directory is executed __every time__ you log in, and there is no way to log in without executing it.
83+
84+
It is strongly recommended that customisation in `~/.bashrc` should be kept to the bare minimum:
85+
86+
1. It sets a fixed set of environment options every time you log in, and all downstream scripts and Slurm batch jobs might assume that these commands have run, so that later modifications to `~/.bashrc` can break workflows in ways that are difficult to debug.
87+
* If a script or batch job requires environment modifications, implement them there.
88+
* In other words, move the definition of environment used by a workflow to the workflow definition.
89+
1. It makes it difficult for CSCS to provide support, because it is difficult for support staff to reproduce your environment, and it can take a lot of back and forth before we determine that the root cause of an issue is a command in `~/.bashrc`.
90+
91+
92+
!!! warning "Do not call `module` in bashrc"
93+
Calls to `module use` and `module load` in `~/.bashrc` is possible, however avoid it for the reasons above.
94+
If there are module commands in your `~/.bashrc`, remember to provide a full copy of `~/.bashrc` with support tickets.
95+
96+
!!! danger "Do not call `uenv` in bashrc"
97+
The `uenv` command is designed for creating isolated environments, and calling it in `~/.bashrc` will not work as expected.
98+
See the [uenv docs][ref-uenv-customenv] for more information about how to create bespoke uenv environments that can be started with a single command.
99+
100+
??? note "Help, I broke bashrc!"
101+
It is possible to add commands to bashrc that will stop you from being able to log in.
102+
The author of these docs has done it more than once, after ignoring their own advice.
103+
104+
For example, if the command `exit` is added to `~/.bashrc` you will be logged out every time you log in.
105+
106+
The first thing to try is to execute a command that will back up `~/.bashrc`, and remove `~/.bashrc`:
107+
```bash
108+
ssh eiger.cscs.ch 'bash --norc --noprofile -c "mv ~/.bashrc ~/.bashrc.back"'
109+
```
110+
If this works, you can then log in normally, and edit the backup and copy it back to `~/.bashrc`.
111+
112+
If there is a critical error, like calling `exit`, the approach above won't work.
113+
In such cases, the only solution that doesn't require root permissions is to log in and hit `<ctrl-c>` during the log in.
114+
With luck, this will cancel before the login process before `~/.bashrc` is executed, and you will be able to edit and fix `~/.bashrc`
115+
Note that you might have to try a few times to get the timing right.
116+
117+
If this does not work, create a [service desk ticket][ref-get-in-touch] with the following message:
118+
119+
!!! example "Help request"
120+
My bashrc has been modified, and I can't log in any longer to `insert-system-name`.
121+
My username is `insert-cscs-username`.
122+
Can you please make a backup copy of my bashrc, i.e. `mv ~/.bashrc ~/.bashrc.back`,
123+
so that I can log in and fix the issue.
124+
125+
* don't because you are locked into a single env
126+
* don't because reproducibility and getting help

docs/software/uenv/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,11 @@ uenv image find @'*'%gh200
602602
!!! note
603603
The wild card `*` used for "all systems" must always be escaped in single quotes: `@'*'`.
604604

605+
[](){#ref-uenv-customenv}
605606
## Custom environments
606607

608+
!!! warning "[Keep bashrc clean][ref-guides-terminal-bashrc]"
609+
607610
It is common practice to add `module` commands to `~.bashrc`, for example
608611
```bash title="~/.bashrc"
609612
# make my custom modules available

0 commit comments

Comments
 (0)