我是编程/脚本初学者,但遇到以下问题。我在堆栈溢出和网络上进行了大量搜索,但无法解决问题。如果有人采用完全不同的方法来解决问题,下面将描述我所面临的详细情况。
是否可以将alias
(我称为go_to
)与多个命令一起使用,但是我只能将argument
传递给第一个command1
?
我想从goto argument
之类的东西执行alias go_to='command1 ; command2'
。
command1
应该基于path
来评估argument
,command2
应该cd
到那里。
我正在使用slurm批处理系统来排队和启动作业的计算机设备上执行计算。使用命令squeue
slurm显示所有正在运行和挂起的作业,包括其Job_ID。使用sjobs <Job_ID>
会显示一堆信息,包括开始计算的路径。我的目标是转到该目录。
我当然可以做到:
squeue
查看所有作业及其Job_ID,sjobs <Job_ID>
以显示信息,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
的评估中。
正如我所说的,我对脚本编写还很陌生,因此欢迎任何其他方式。
答案 0 :(得分:2)
定义一个函数来代替调用两个命令。该函数的参数可以传递给第一个命令。
go_to () {
command1 "$1"
command2
}