$0 或 $BASH_SOURCE 被集群修改后恢复

$0 或 $BASH_SOURCE 被集群修改后恢复

我正在使用共享 SLURM 集群。我试图从脚本本身内部获取 bash 脚本的路径。

这里已经有一个很棒的线程:https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself。不幸的是,这些解决方案都不适合我。当我正常执行 bash 脚本时它们起作用,但当我将脚本作为作业提交时它们不起作用。我尝试过$BASH_SOURCE、、、和 。它们都返回类似 的内容,这是 SLURM 自动生成的路径,与我提交的脚本无关。我怀疑是否有任何其他解决方案可以直接回答我尚未提到的问题,但是是否有某种方法可以覆盖集群正在执行的任何操作?我能以某种方式恢复标准的 bash 行为吗?$0$_readlink /proc/$$/fd/255/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script

答案1

问题在评论里已经解决了。

总结一下:事实证明我没有正确诊断最初的问题。 SLURM 没有修改$BASH_SOURCE$0.我以为它只是执行了我的脚本,但它实际上将我的脚本复制到了新位置 ( /cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script)。为了获得我期望的行为,我提交了带有--wrap参数的作业,该参数将指定的命令字符串包装在 shell 脚本中。

相关内容