我正在尝试直接将目录 ( cd
) 更改为使用 SLURM 工作负载管理器运行作业的文件夹。
我可以检查 SLURM 脚本在哪里运行
squeue --format %Z% -j 123
现在我也可以提取,目录名称为
echo $(squeue --format "%Z" -j <jobid>) | awk '{print $2}'
(2021 年 11 月 26 日编辑。) 它确实在终端中显示文件夹名称,例如
/HDD_Drive/myfiles/myfolder
但是当我cd
与此结合使用时,我仍然在当前文件夹中。有趣的是,如果我以同样的方式检查进程 PID:
cd "$(pwdx <PID> | awk '{print $2}')"
它确实更改了我的目录,但在检查 SLURM 作业 ID 时,我有这种奇怪的行为。总之:
echo $(squeue --format "%Z" -j jobid ) | awk '{print $2}'
将当前目录显示为
/HDD_Drive/myfiles/myfolder
但
cd $(squeue --format "%Z" -j 212 ) | awk '{print $2}'
节目
-bash: cd: too many arguments
与
cd $(squeue --format "%Z" -j 212 | awk '{print $2}')
我还在当前目录。谢谢你!
答案1
因为您能够提取目录,所以您几乎成功了。现在,您只需使用它作为参数cd
:
cd $(squeue --format "%Z" | awk '{print $2}')
应该做。命令替换$( ... )
将被括号中命令的输出替换。
请注意,这意味着您在尝试中使用的语法不必要地复杂:Since$( cmd )
被替换为输出括号中的命令的echo $( cmd )
作用与简单调用cmd
.