$(dirname $PWD) 返回 null 或为空

$(dirname $PWD) is returning null or is empty

我是 SBATCH 和 bash 的新手。我有一个简单的脚本来提交作业,我正在尝试获取当前工作目录的父目录。从文档看来,'$(dirname $PWD)' 是执行此操作的方法。但它总是 returns null 或为空。我尝试过非常不同的版本,例如“$(dirname '$PWD')”或只是 $(dirname $PWD)。它们都导致 null。我怀疑缺少一些非常基本的东西。关于我应该检查什么以更好地解决或调试此问题的任何建议都会有所帮助。这是示例代码(已简化)

#!/bin/bash

sbatch <<EOT
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --cpus-per-task=
#SBATCH --partition=express
#SBATCH --time=01:00:00
#SBATCH --mem-per-cpu=4G
#SBATCH --output=_%A_%a.out
#SBATCH --array=0-4%5
#SBATCH --error=%A__%a.err
#SBATCH --constraint=broadwell

PARENT_DIR="$(dirname $PWD)"
echo "Main directory for submit-test-express script is: $PARENT_DIR"

echo "Current drectory is: $PWD"

echo "Job array ID: $SLURM_ARRAY_JOB_ID , sub-job $SLURM_ARRAY_TASK_ID is running!"


python /path_to_code/code.py    $SLURM_ARRAY_TASK_ID /output_folder/ > output_file-$SLURM_ARRAY_JOB_ID-$SLURM_ARRAY_TASK_ID.out

EOT

代码封装在 EOT 中,以便可以从其他脚本传递参数。另请注意,第二个 echo 语句正确打印了当前工作目录。但是第一个echo语句returns空白。

因为你使用的是 $PARENT_DIR unscaped 你的变量在将完整的 heredoc 传递给 sbatch 之前得到评估,尝试转义 $ 如:$PARENT_DIR