如果别名包含多个命令,是否可以将参数传递给第一个命令?

时间:2018-07-04 12:57:46

标签: python bash alias slurm

我是编程/脚本初学者,但遇到以下问题。我在堆栈溢出和网络上进行了大量搜索,但无法解决问题。如果有人采用完全不同的方法来解决问题,下面将描述我所面临的详细情况。

是否可以将alias(我称为go_to)与多个命令一起使用,但是我只能将argument传递给第一个command1

我想从goto argument之类的东西执行alias go_to='command1 ; command2'

command1应该基于path来评估argumentcommand2应该cd到那里。

详细情况

我正在使用slurm批处理系统来排队和启动作业的计算机设备上执行计算。使用命令squeue slurm显示所有正在运行和挂起的作业,包括其Job_ID。使用sjobs <Job_ID>会显示一堆信息,包括开始计算的路径。我的目标是转到该目录。 我当然可以做到:

  1. squeue查看所有作业及其Job_ID,
  2. 选择其中一个Job_ID,
  3. sjobs <Job_ID>以显示信息,
  4. 用眼睛搜索包含路径的行,复制路径,然后
  5. cd path到达我想去的地方。

如果要检查多个计算,这是一个冗长的过程。因此,我想使用别名和/或bash或python脚本(我们将其称为go_to),因此我只需要键入go_to <Job_ID>即可到达目录。

到目前为止,我使用python脚本实现了python script.py <Job_ID>来调用sjobs并从中提取path(但也可以将sjobs传递到grep和sed)。 我已经看过了 Why doesn't "cd" work in a shell script?Location of cd executable,并了解os.chdir(path)subprocess.call(['cd',path])仅会更改python子外壳内的目录,并且一旦脚本完成,我将最终位于同一目录中我在哪里开始脚本。

据我了解,只有alias才能带我到path。因此,我的想法是将path从python脚本输出到文件中,例如Path.txt可以用作别名。使用别名

alias go_to='cd $(head -1 /absolute/path/to/Path.txt)' 可以更改为所需的path。但这涉及让python脚本事先运行。 现在对我来说,实际的问题是一步完成此操作,因为我需要首先将<Job_ID>传递到path的评估中。

正如我所说的,我对脚本编写还很陌生,因此欢迎任何其他方式。

1 个答案:

答案 0 :(得分:2)

定义一个函数来代替调用两个命令。该函数的参数可以传递给第一个命令。

go_to () {
    command1 "$1"
    command2
}