在 Ubuntu 中定义函数

在 Ubuntu 中定义函数

我正在使用 Ubuntu 访问一台正在进行计算的远程计算机。我可以使用以下命令访问有关之前运行的作业的信息

sacct --starttime 2022-09-17 --format=JobID,Jobname,state,start,end,elapsed,ncpus,nodelist

我想创建一个函数“history”,该函数接受一个日期(在上面的示例中为 2022-09-17)并以该日期作为开始时间执行上述代码。我没有在 Ubuntu 上编写代码的经验,所以如果有人能告诉我如何定义这样的函数就太好了。

编辑:我找到了解决方案:

function history { sacct --starttime $1 --format=JobID,Jobname,state,start,end,elapsed,ncpus,nodelist; }

答案1

首先,请不要将函数命名为history。这是 bash 的历史记录工具的名称,该工具允许您查看和操作已运行的命令的历史记录。因此,如果您使用相同名称定义新函数,则会丢失原始函数。因此,请将您的函数命名为hist或其他未使用的名称。

接下来,shell 函数的格式为:

function_name(){ command1; command2; ... commandN; }

在某些 shell 中,包括 ( Ubuntu 上的默认 shell),您还可以在开头bash添加可选关键字:function

function function_name(){ command1; command2; ... commandN; }

但这不是必需的。因此,对于你的情况,你可以这样做:

hist() { sacct --starttime "$1" --format=JobID,Jobname,state,start,end,elapsed,ncpus,nodelist; }

注意我如何引用"$1"。这很重要,因为它可以保护您从 shell 传递的值,因此任何特殊字符都不会被扩展。有关引用为何如此重要的详细信息,请参阅:

最后,为了让该函数在您打开的所有新 shell 中可用,请编辑该文件~/.bashrc并将上面的行添加到其中。现在,下次您打开新终端时,该函数将可用。

答案2

创建脚本hist.sh

#!/bin/sh
sacct --starttime $1 --format=JobID,Jobname,state,start,end,elapsed,ncpus,nodelist

授予其执行权限

chmod +x hist.sh

运行它

./hist.sh 2022-09-17

相关内容