Разница между mkdir и mktemp внутри скрипта

Когда я использую mkdir для создания каталога с именем WORKDIR в cwd, отлично работает следующий способ:

      #!/bin/bash

SUBDIR=$(pwd)
export BASISDIR="/home/Basis_Sets"

for i in *.ZMAT; do
    [ -f "$i" ] || break
    BASENAME=$(basename $i .ZMAT)
    ZMAT_file=$BASENAME.ZMAT
    FCMINT_file=$BASENAME.FCMINT
    ERROR_file=$BASENAME.slu
    
    mkdir $SUBDIR/$BASENAME
    export WORKDIR="$SUBDIR/$BASENAME"
    if [[ ! -f $ERROR_file ]] && [[ -d $WORKDIR ]]; then
        cp $BASENAME.* $WORKDIR
        cp $BASISDIR/GENBAS $WORKDIR
        cp _CFOUR_SLURM.SUB $WORKDIR
        cd $WORKDIR
        RUN_COMMAND="sbatch -J $BASENAME _CFOUR_SLURM.SUB"
        eval $RUN_COMMAND
        mv $ZMAT_file ZMAT
        mv $FCMINT_file FCMINT
        file_count=$(ls -x *)
        echo "File Count: $file_count"
        cd $SUBDIR
        sleep 10
    else
        echo "$BASENAME Error File Exists - Not Submitting Job"
    fi
done

Однако, когда я использую его следующим образом, он не может идентифицировать WORKDIR, но каталог все еще создается (т.е. оператор if не работает, но каталог создается). Я использовал этот идентичный метод в другом скрипте для создания временного каталога [то есть: NAME = $(mktemp -d ....)], и он отлично работает. Почему приведенный ниже код работает для mktemp, но не для mkdir?

      #!/bin/bash

SUBDIR=$(pwd)
export BASISDIR="/home/Basis_Sets"

for i in *.ZMAT; do
    [ -f "$i" ] || break
    BASENAME=$(basename $i .ZMAT)
    ZMAT_file=$BASENAME.ZMAT
    FCMINT_file=$BASENAME.FCMINT
    ERROR_file=$BASENAME.slu
    
    WORKDIR=$(mkdir $SUBDIR/$BASENAME)

    if [[ ! -f $ERROR_file ]] && [[ -d $WORKDIR ]]; then
        cp $BASENAME.* $WORKDIR
        cp $BASISDIR/GENBAS $WORKDIR
        cp _CFOUR_SLURM.SUB $WORKDIR
        cd $WORKDIR
        RUN_COMMAND="sbatch -J $BASENAME _CFOUR_SLURM.SUB"
        eval $RUN_COMMAND
        mv $ZMAT_file ZMAT
        mv $FCMINT_file FCMINT
        file_count=$(ls -x *)
        echo "File Count: $file_count"
        cd $SUBDIR
        sleep 10
    else
        echo "$BASENAME Error File Exists - Not Submitting Job"
    fi
done

1 ответ

не выводит имя созданного каталога; mktemp -dделает. С mkdir ничего не печатает, $WORKDIR устанавливается в пустую строку.

Другие вопросы по тегам