我正在使用 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