引言

我经常需要在SLURM集群上启动一个交互式会话,完整命令如下:

1
srun --partition=a100 --nodes=1 --cpus-per-task=4 --mem=64G --nodelist=a100node1 --time=0 --pty /bin/bash

这个命令太长了,每次输入都很麻烦。我希望创建一个简短的命令 a1n1 来代替它。


实现方法

将自定义命令集中管理,更加规范和易于维护

  1. 创建一个自定义脚本的目录
1
mkdir -p ~/bash_scripts
  1. 创建名为 a1n1 的脚本文件:
1
vi ~/bash_scripts/a1n1

在文件中写入以下内容:

1
2
#!/bin/bash
srun --partition=a100 --nodes=1 --cpus-per-task=4 --mem=64G --nodelist=a100node1 --time=0 --pty /bin/bash

第一行 #!/bin/bash 是shebang,指定使用bash解释器执行此脚本。

  1. 赋予执行权限
1
chmod +x ~/bash_scripts/a1n1
  1. ~/.bashrc 末尾添加脚本目录到PATH
1
echo 'export PATH="$HOME/bash_scripts:$PATH"' >> ~/.bashrc
  1. 重新加载配置使其生效
1
source ~/.bashrc

现在,只需输入 a1n1,就能启动一个配置好的A100节点交互式会话了!
今后需要再添加新命令时,也只需在 $HOME/bash_scripts/ 中直接创建命令文件即可


export PATHalias 的区别

虽然 export PATHalias 都可以用来创建自定义命令,但它们有本质的区别:

  • export PATH:将目录添加到系统的可执行文件搜索路径中。当输入命令时,系统会在 PATH 中的所有目录里查找对应的可执行文件。这种方式更接近系统原生命令的工作方式,脚本可以被其他程序调用,也可以在子shell中使用。

  • alias:创建命令的别名或快捷方式。alias 只在当前 shell 中有效,不能被脚本或其他程序调用,也不能在子shell中使用。它更适合用于简单的命令替换或添加默认参数。

使用 export PATH 的优势:

  1. 更加规范:脚本像系统命令一样工作
  2. 可移植性好:脚本可以被其他脚本或程序调用
  3. 易于管理:所有自定义脚本集中在一个目录中
  4. 功能完整:支持参数传递、管道操作等所有shell特性

因此,对于需要创建可执行脚本的场景,使用 export PATH 是更好的选择。